├── .Bcheckin ├── .gitattributes ├── .gitignore ├── LICENSE ├── alloc ├── alloc.asm ├── alloc.mak ├── allocc.c ├── alloinit.asm ├── allopool.asm ├── allopoolc.c ├── compallo.asm ├── compalloc.c ├── comprele.asm ├── comprelec.c ├── go.bat ├── initpool.asm ├── initpoolc.c ├── ldata.asm ├── ldatac.c ├── malloc.c ├── minidata.asm └── minidatac.c ├── appload ├── appload.mak ├── bin2db.c ├── bin2db.exe ├── compress.dat ├── compress │ ├── back.bat │ ├── comp.asm │ ├── comp.zip │ ├── comp1.zip │ ├── crc32.asm │ ├── ctest │ ├── data.asm │ ├── db.bat │ ├── go.bat │ ├── l.bat │ ├── lzw │ ├── macros │ ├── rexepack.asm │ ├── slr32 │ └── unslr.asm ├── db.bat ├── doit.bat ├── go.bat ├── go1.bat ├── macros ├── makefile ├── nappload.asm ├── nappload.obj ├── nappload.sys ├── nappload.zzz ├── newexe.inc ├── optasm.exe ├── optlib.exe ├── optlink.exe ├── slrload.asm ├── slrload.dat ├── slrload.obj └── slrloadb.dat ├── bugs └── test.c ├── build.bat ├── build_optlink.bat ├── checkin ├── clean.bat ├── common ├── LIDATA.ASM ├── Pe_struc ├── alias.asm ├── align.asm ├── all.h ├── c32.asm ├── c32moves.asm ├── c32quik.asm ├── c32slr.asm ├── cddata ├── cddata.h ├── cextdef.asm ├── cfgproc.asm ├── classes ├── cmdsubs.asm ├── cmdsubs.d ├── cmdsubsc.c ├── coff_lib ├── comdat.asm ├── comdats.asm ├── comdef.asm ├── coment.asm ├── common.mak ├── communal.asm ├── csubs.asm ├── cvstuff ├── cvstuff.h ├── cvtypes ├── cvtypes.h ├── cx.asm ├── defpubs.asm ├── demangle.asm ├── errors.asm ├── errors.h ├── exe.asm ├── exepack.asm ├── exes ├── exes.h ├── extdef.asm ├── fix2temp ├── fixtemps ├── fixupp.asm ├── fixupp.d ├── fixupp2.asm ├── fixupp2.d ├── fixupp2c.c ├── forref.asm ├── forref2.asm ├── go.bat ├── groups ├── groups.d ├── groups.h ├── grpdef.asm ├── grpdefc.asm ├── grpdefc.c ├── iniproc.asm ├── initcode ├── initcode.d ├── initmap.asm ├── io_struc ├── io_struc.d ├── io_struc.h ├── japan.inc ├── ledata.asm ├── libase.asm ├── library ├── library.h ├── lidata.asm ├── link ├── linmap.asm ├── linnum.asm ├── linsym.asm ├── lnames.asm ├── lnkdat.asm ├── lnkdat.h ├── lnkinit.asm ├── lnkinitc.c ├── lzw ├── macros ├── macros.h ├── macrosc.c ├── makemacs ├── mapsubs.asm ├── maptemp ├── middle.asm ├── modend.asm ├── modules ├── modules.h ├── mscmdlin.asm ├── mscmdlinc.c ├── nbkpat.asm ├── newlib.asm ├── newlibc.c ├── obj_mod.asm ├── opreadt.asm ├── optlink.h ├── optlnk.asm ├── optlnk.d ├── optlnkc.c ├── order.asm ├── packsegs.asm ├── pass1.asm ├── pass2.asm ├── pass2c.c ├── pe_sect.asm ├── pe_struc ├── pe_struc.h ├── personal.asm ├── pubdef.asm ├── quick.asm ├── quikrelo.asm ├── quiktemp ├── records.asm ├── recordsc.c ├── release ├── relocss ├── resstruc ├── rexepack.asm ├── sections ├── sectmap.asm ├── sects ├── sects.d ├── segdef.asm ├── segmap.asm ├── segments ├── segments.d ├── segments.h ├── segmsyms ├── segmsyms.h ├── semaphor.asm ├── slr32 ├── stack.asm ├── strtmap.asm ├── subs.asm ├── symbols ├── symbols.d ├── symbols.h ├── symcmacs ├── symmap.asm ├── tdbg ├── tdtypes ├── theadr.asm ├── theadr.c ├── unexe.asm ├── unexe.dat ├── unexe.sys ├── unexe2.asm ├── unpack32.asm ├── unquik.asm ├── virdef.asm ├── win32def ├── winmacs ├── writemap.asm └── xrfmap.asm ├── cv ├── ccnt.bat ├── cv.mak ├── cvfilall.asm ├── cvglball.asm ├── cvhashesc.c ├── cvindex.asm ├── cvindexc.c ├── cvlibrar.asm ├── cvlin4.asm ├── cvlin4c.c ├── cvlinnum.asm ├── cvmod3.asm ├── cvmod4.asm ├── cvmodall.asm ├── cvpub4.asm ├── cvpuball.asm ├── cvpublic.asm ├── cvsegtbl.asm ├── cvstaall.asm ├── cvstuff.asm ├── cvsym1.asm ├── cvsymbol.asm ├── cvsymbolc.c ├── cvtypall.asm ├── cvtypcon.asm ├── cvtypes.asm ├── derivate.asm ├── dll.mak ├── go.bat ├── instgsym.asm ├── instgsymc.c ├── link ├── nt.mak ├── qsortadr.asm ├── qsortlin.asm ├── txtomf.asm ├── xdebug.asm └── xdebugc.c ├── dllstuff ├── dllentry.asm ├── dllstuff.mak ├── go.bat ├── libentry.asm ├── link └── spwntool.c ├── dorel.bat ├── exe ├── aistuff.asm ├── calcexe.asm ├── compmsg.asm ├── dll.mak ├── dosxinit.asm ├── endsect.asm ├── eosegs.asm ├── exe.mak ├── exeinit.asm ├── exestr.asm ├── fixds.asm ├── fllinnum.asm ├── flusfina.asm ├── flushexe.asm ├── go.bat ├── handcomp.asm ├── icode.asm ├── idata.asm ├── initrang.asm ├── ldata.asm ├── link ├── movefina.asm ├── newsect.asm ├── nt.mak ├── omf.asm ├── outldata.asm ├── pack0.asm ├── pe_chang.asm ├── pe_reloc.asm ├── peendsec.asm ├── pendsect.asm ├── pflush.asm ├── pnewseg.asm ├── ratstuff.asm ├── realrelo.asm ├── rflush.asm ├── rnewseg.asm ├── segminit.asm ├── segmrelo.asm ├── shldxdi.asm ├── winprelo.asm └── zero.asm ├── getlog.bat ├── gr.bat ├── install.bat ├── install ├── addtoext.asm ├── defclass.asm ├── dsegmod.asm ├── farinst.asm ├── farinstc.c ├── finsegatc.c ├── fuzzinst.asm ├── getsegmt.asm ├── go.bat ├── ientry.asm ├── ientrynm.asm ├── install.mak ├── instclas.asm ├── instcomm.asm ├── instcommc.c ├── instfile.asm ├── instflnm.asm ├── instgrp.asm ├── instimpn.asm ├── instnmsp.asm ├── instout.asm ├── instpent.asm ├── instrelo.asm ├── instseg.asm ├── instsoft.asm ├── iresname.asm ├── irestype.asm ├── link ├── mlticseg.asm ├── modinst.asm ├── modname.asm ├── modpagec.c ├── mycomdat.asm ├── nameinst.asm ├── putgroup.asm ├── sentry.asm ├── sentrynm.asm ├── softpent.asm └── srcinst.asm ├── makefile ├── moves ├── dopublic.asm ├── dopublic.d ├── fakeleda.asm ├── fakeleda.d ├── go.bat ├── moves.mak ├── mvlname.asm ├── mvlname.d ├── pubcheck.asm ├── pubcheck.d ├── putdata.asm ├── putdata.d └── putdatac.c ├── ntio ├── capture.asm ├── capturec.c ├── cvpackrn.asm ├── dosio.asm ├── dosio.mak ├── dosioc.c ├── dosposa.asm ├── dosposac.c ├── doswrite.asm ├── doswritec.c ├── dot.asm ├── dotc.c ├── fancy.asm ├── fancyc.c ├── findfirs.asm ├── findfirsc.c ├── flushes.asm ├── flushesc.c ├── gettime.asm ├── gettimec.c ├── go.bat ├── libreadt.asm ├── libreadtc.c ├── libstuff.asm ├── libstuffc.c ├── loadx.asm ├── ntio.mak ├── openin.asm ├── openinc.c ├── openout.asm ├── openoutc.c ├── openread.asm ├── openreadc.c ├── opreadt.asm ├── opreadtc.c ├── printf.c ├── prompt.asm ├── promptc.c ├── recohndl.asm ├── recohndlc.c ├── reopen.asm ├── reopenc.c ├── terrors.asm ├── terrorsc.c ├── xcnotify.asm └── xcnotifyc.c ├── optlink_vs08.sln ├── optlink_vs08.vcproj ├── os2link ├── 2go.txt ├── build.bat ├── db.bat ├── domaps.bat ├── fv.cfg ├── go.bat ├── godll.bat ├── gowin.bat ├── help ├── install.bat ├── l.bat ├── launch.bat ├── linknd.din ├── lwin32.bat ├── lwindll.bat ├── makefile ├── mdgo.bat ├── objnt │ └── link.def ├── optdll.mak ├── optlinks.cfg ├── os2link.mak ├── perform.doc ├── release ├── relnotes.txt ├── setlib.bat ├── setlibdll.bat ├── setlibnt.bat ├── slr ├── slr1 ├── slr2 ├── slr3 ├── slr3dll ├── slrdll ├── slrnt ├── slrnt1 ├── slrnt3 ├── src │ ├── def.asm │ ├── director.asm │ ├── entries.asm │ ├── first.asm │ ├── impexp.asm │ ├── mscope.asm │ ├── outdin.asm │ ├── outlib.asm │ ├── outlibc.asm │ ├── pe_debug.asm │ ├── pe_rsrc.asm │ ├── peexport.asm │ ├── peimport.asm │ ├── prolog.asm │ ├── realia.asm │ ├── realpers.asm │ ├── resource.asm │ ├── ressort.asm │ ├── symc.asm │ └── tsymc.asm ├── try.bat └── x.def ├── overlays ├── allocate.asm ├── allosect.asm ├── allovtbl.asm ├── aslrovl.asm ├── declsegs.asm ├── genstuff.asm ├── go.bat ├── link ├── overlays.mak ├── personal.asm └── sizesegs.asm ├── parse.d ├── parse ├── chknul.asm ├── chknulc.c ├── do_fn.asm ├── do_fnc.c ├── get_fn.asm ├── get_fnc.c ├── go.bat ├── gtnxtu.asm ├── gtnxtuc.c ├── hndllibs.asm ├── hndllibsc.c ├── librtn.asm ├── librtnc.c ├── mvfilnam.asm ├── mvfilnamc.c ├── mvfn.asm ├── mvfnasc.asm ├── mvfnascc.c ├── mvfnc.c ├── mvlistnf.asm ├── mvlistnfc.c ├── mvpath.asm ├── mvpathc.c ├── mvsrcfil.asm ├── mvsrcfilc.c ├── parse.mak ├── parse_fn.asm └── parse_fnc.c ├── revert.bat ├── sc └── unmangle.c ├── subs ├── arrays.asm ├── casecomp.asm ├── dismap.asm ├── eoind.asm ├── eoindc.c ├── getname.asm ├── getnamec.c ├── getsmmod.asm ├── go.bat ├── hexwout.asm ├── link ├── listinit.asm ├── local.asm ├── myis.asm ├── myisc.c ├── ovlterm.asm ├── perform.asm ├── putdata.asm ├── readseq.asm ├── relexe_5.asm ├── set_outf.asm ├── storeseq.asm ├── subs.mak ├── tdpartbl.asm ├── tptrvptr.asm ├── unmangle.asm └── xref.asm ├── testall.bat └── x32 └── lib ├── slr.obj ├── x32v.lib └── zlx.lod /.Bcheckin: -------------------------------------------------------------------------------- 1 | unzip -o ../optlinkcsrc 2 | git commit -a -m "more" 3 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.sln eol=crlf 2 | *.vcproj eol=crlf 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | LIBNT/ 2 | alloc/LSTNT/ 3 | alloc/OBJNT/ 4 | common/LSTNT/ 5 | common/OBJNT/ 6 | cv/LSTNT/ 7 | cv/OBJNT/ 8 | exe/LSTNT/ 9 | exe/OBJNT/ 10 | install/LSTNT/ 11 | install/OBJNT/ 12 | moves/LSTNT/ 13 | moves/OBJNT/ 14 | ntio/LSTNT/ 15 | ntio/OBJNT/ 16 | os2link/LSTNT/ 17 | os2link/OBJNT/ 18 | overlays/LSTNT/ 19 | overlays/OBJNT/ 20 | parse/LSTNT/ 21 | parse/OBJNT/ 22 | subs/LSTNT/ 23 | subs/OBJNT/ 24 | /vsdir 25 | *.suo 26 | *.ncb 27 | *.user 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Boost Software License - Version 1.0 - August 17th, 2003 2 | 3 | Permission is hereby granted, free of charge, to any person or organization 4 | obtaining a copy of the software and accompanying documentation covered by 5 | this license (the "Software") to use, reproduce, display, distribute, 6 | execute, and transmit the Software, and to prepare derivative works of the 7 | Software, and to permit third-parties to whom the Software is furnished to 8 | do so, all subject to the following: 9 | 10 | The copyright notices in the Software and this entire statement, including 11 | the above license grant, this restriction and the following disclaimer, 12 | must be included in all copies of the Software, in whole or in part, and 13 | all derivative works of the Software, unless such copies or derivative 14 | works are solely in the form of machine-executable object code generated by 15 | a source language processor. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 20 | SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 21 | FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 22 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 | DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /alloc/alloc.mak: -------------------------------------------------------------------------------- 1 | !INCLUDE ..\COMMON\MAKEMACS 2 | 3 | 4 | FLAGS = $(MASMFLAGS) 5 | SRC = $(BASE)\ALLOC 6 | CFLAGS=$(DMCFLAGS) 7 | 8 | HEADERS=..\common\all.h ..\common\optlink.h ..\common\errors.h ..\common\io_struc.h \ 9 | ..\common\exes.h ..\common\library.h ..\common\symbols.h ..\common\groups.h \ 10 | ..\common\segments.h ..\common\segmsyms.h ..\common\lnkdat.h ..\common\cvtypes.h \ 11 | ..\common\cvstuff.h ..\common\pe_struc.h 12 | 13 | ALL : $(LIB)\ALLOC.LIB 14 | 15 | $(LIB)\ALLOC.LIB : $(OBJ)\ALLOPOOL.OBJ $(OBJ)\allopoolc.obj $(OBJ)\ldatac.obj \ 16 | $(OBJ)\ALLOC.OBJ $(OBJ)\allocc.obj $(OBJ)\malloc.obj \ 17 | $(OBJ)\comprelec.obj $(OBJ)\minidatac.obj $(OBJ)\compalloc.obj 18 | $(BUILD_LIB) 19 | 20 | 21 | $(OBJ)\MINIDATA.OBJ : MINIDATA.ASM ..\COMMON\MACROS 22 | ML $(FLAGS) $(SRC)\MINIDATA.ASM 23 | 24 | $(OBJ)\ALLOPOOL.OBJ : ALLOPOOL.ASM ..\COMMON\MACROS 25 | ML $(FLAGS) $(SRC)\ALLOPOOL.ASM 26 | 27 | $(OBJ)\COMPALLO.OBJ : COMPALLO.ASM ..\COMMON\MACROS ..\COMMON\WIN32DEF 28 | ML $(FLAGS) $(SRC)\COMPALLO.ASM 29 | 30 | $(OBJ)\COMPRELE.OBJ : COMPRELE.ASM ..\COMMON\MACROS ..\COMMON\WIN32DEF 31 | ML $(FLAGS) $(SRC)\COMPRELE.ASM 32 | 33 | $(OBJ)\ALLOC.OBJ : ALLOC.ASM ..\COMMON\MACROS ..\COMMON\WIN32DEF 34 | ML $(FLAGS) $(SRC)\ALLOC.ASM 35 | 36 | $(OBJ)\INITPOOL.OBJ : INITPOOL.ASM ..\COMMON\MACROS 37 | ML $(FLAGS) $(SRC)\INITPOOL.ASM 38 | 39 | $(OBJ)\LDATA.OBJ : LDATA.ASM ..\COMMON\MACROS ..\COMMON\SEGMENTS 40 | ML $(FLAGS) $(SRC)\LDATA.ASM 41 | 42 | 43 | $(OBJ)\allocc.obj : allocc.c $(HEADERS) 44 | dmc -N_ -c allocc -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\allocc.obj 45 | 46 | $(OBJ)\allopoolc.obj : allopoolc.c $(HEADERS) 47 | dmc -N_ -c allopoolc -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\allopoolc.obj 48 | 49 | $(OBJ)\compalloc.obj : compalloc.c $(HEADERS) 50 | dmc -N_ -c compalloc -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\compalloc.obj 51 | 52 | $(OBJ)\comprelec.obj : comprelec.c $(HEADERS) 53 | dmc -N_ -c comprelec -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\comprelec.obj 54 | 55 | $(OBJ)\initpoolc.obj : initpoolc.c $(HEADERS) 56 | dmc -N_ -c initpoolc -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\initpoolc.obj 57 | 58 | $(OBJ)\ldatac.obj : ldatac.c $(HEADERS) 59 | dmc -N_ -c ldatac -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\ldatac.obj 60 | 61 | $(OBJ)\malloc.obj : malloc.c $(HEADERS) 62 | dmc -N_ -c malloc -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\malloc.obj 63 | 64 | $(OBJ)\minidatac.obj : minidatac.c $(HEADERS) 65 | dmc -N_ -c minidatac -NTROOT_TEXT $(CFLAGS) -o$(OBJ)\minidatac.obj 66 | 67 | 68 | -------------------------------------------------------------------------------- /alloc/alloinit.asm: -------------------------------------------------------------------------------- 1 | TITLE ALLOINIT - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | if 0 6 | 7 | endif 8 | 9 | END 10 | 11 | -------------------------------------------------------------------------------- /alloc/compallo.asm: -------------------------------------------------------------------------------- 1 | TITLE COMPALLO - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | if fg_slrpack 6 | 7 | if fgh_win32 8 | INCLUDE WIN32DEF 9 | endif 10 | 11 | ; PUBLIC GET_LARGE_SEGMENT 12 | 13 | 14 | .DATA 15 | 16 | EXTERNDEF SEG_RELEASED_256K:DWORD,SEG_RELEASED_128K:DWORD 17 | 18 | 19 | .CODE PASS2_TEXT 20 | 21 | EXTERNDEF _oom_error:proc,_SBRK:PROC 22 | externdef _get_large_segment:proc 23 | 24 | 25 | GMEM_MOVEABLE EQU 2 26 | 27 | 28 | if fgh_dosx 29 | 30 | GET_LARGE_SEGMENT PROC 31 | ; 32 | ; 33 | ; 34 | CMP EAX,256K 35 | JZ GET_256K_SEGMENT 36 | 37 | CMP EAX,128K 38 | JNZ OOM_ERROR 39 | 40 | XOR EAX,EAX 41 | 42 | XCHG EAX,SEG_RELEASED_128K 43 | 44 | OR EAX,EAX 45 | JNZ L1$ 46 | 47 | MOV EAX,128K 48 | CALL _SBRK 49 | L1$: 50 | RET 51 | 52 | GET_256K_SEGMENT: 53 | XOR EAX,EAX 54 | 55 | XCHG EAX,SEG_RELEASED_256K 56 | 57 | TEST EAX,EAX 58 | JNZ L1$ 59 | 60 | MOV EAX,256K 61 | CALL _SBRK 62 | 63 | RET 64 | 65 | GET_LARGE_SEGMENT ENDP 66 | 67 | 68 | endif 69 | 70 | 71 | if fgh_win32 72 | 73 | GET_LARGE_SEGMENT PROC 74 | ; 75 | ; 76 | ; 77 | PUSHM EDX,ECX 78 | push EAX 79 | call _get_large_segment 80 | add ESP,4 81 | 82 | ; PUSH PAGE_READWRITE 83 | ; PUSH MEM_RESERVE+MEM_COMMIT 84 | 85 | ; PUSH EAX 86 | ; PUSH 0 87 | 88 | ; CALL VirtualAlloc 89 | 90 | POPM ECX,EDX 91 | 92 | ; OR EAX,EAX 93 | ; JZ L1 94 | 95 | RET 96 | 97 | ;L1: call _oom_error 98 | ; ret 99 | 100 | GET_LARGE_SEGMENT ENDP 101 | 102 | endif 103 | 104 | endif 105 | 106 | END 107 | 108 | -------------------------------------------------------------------------------- /alloc/compalloc.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "all.h" 5 | 6 | 7 | void *_get_large_segment(int EAX) 8 | { 9 | void *p = VirtualAlloc(0, EAX, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); 10 | if (!p) 11 | _oom_error(); 12 | return p; 13 | } 14 | -------------------------------------------------------------------------------- /alloc/comprele.asm: -------------------------------------------------------------------------------- 1 | TITLE COMPRELE - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | if fg_slrpack 6 | 7 | if fgh_win32 8 | INCLUDE WIN32DEF 9 | endif 10 | 11 | PUBLIC RELEASE_LARGE_SEGMENT 12 | 13 | 14 | .DATA 15 | 16 | EXTERNDEF SEG_RELEASED_128K:DWORD,SEG_RELEASED_256K:DWORD 17 | 18 | 19 | .CODE ROOT_TEXT 20 | 21 | EXTERNDEF RELEASE_SEGMENT:PROC,_seg_released:proc,FORCE_RELEASE_SEGMENT:PROC,OOM_ERROR:PROC 22 | externdef _release_large_segment:proc 23 | 24 | 25 | if fgh_dosx 26 | 27 | RELEASE_LARGE_SEGMENT PROC 28 | ; 29 | ; 30 | ; 31 | CMP ECX,256K 32 | JZ RELEASE_256K_SEGMENT 33 | 34 | CMP ECX,128K 35 | JNZ OOM_ERROR 36 | 37 | MOV SEG_RELEASED_128K,EAX 38 | 39 | RET 40 | 41 | RELEASE_256K_SEGMENT: 42 | ; 43 | ; 44 | ; 45 | MOV SEG_RELEASED_256K,EAX 46 | 47 | RET 48 | 49 | RELEASE_LARGE_SEGMENT ENDP 50 | 51 | endif 52 | 53 | if fgh_win32 54 | 55 | RELEASE_LARGE_SEGMENT PROC 56 | ; 57 | ; 58 | ; 59 | PUSHM EDX,ECX 60 | 61 | push EAX 62 | call _release_large_segment 63 | add ESP,4 64 | 65 | ; PUSH MEM_RELEASE 66 | ; PUSH 0 ;RELEASE ALL 67 | 68 | ; PUSH EAX 69 | ; CALL VirtualFree 70 | 71 | ; TEST EAX,EAX 72 | ; JZ _seg_released 73 | 74 | POPM ECX,EDX 75 | 76 | RET 77 | 78 | RELEASE_LARGE_SEGMENT ENDP 79 | 80 | endif 81 | 82 | endif 83 | 84 | END 85 | 86 | -------------------------------------------------------------------------------- /alloc/comprelec.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "all.h" 5 | 6 | void _release_large_segment(void *p) 7 | { 8 | int result = VirtualFree(p, 0, MEM_RELEASE); 9 | if (!result) 10 | _seg_released(); 11 | } 12 | -------------------------------------------------------------------------------- /alloc/go.bat: -------------------------------------------------------------------------------- 1 | NMAKE ALLOC.MAK %1= 2 | 3 | -------------------------------------------------------------------------------- /alloc/initpool.asm: -------------------------------------------------------------------------------- 1 | TITLE INITPOOL - Copyright (C) 1992 SLR Systems 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC INIT_POOL 6 | 7 | .CODE ROOT_TEXT 8 | 9 | SOFT EXTP GET_NEW_LOG_BLK 10 | 11 | ASSUME DS:NOTHING 12 | 13 | INIT_POOL PROC 14 | ; 15 | ;SI MUST BE POINTING TO _STUFF, INITIALIZE WITHOUT HASH TABLE 16 | ; 17 | IF 0 18 | PUSHM ES,DI,CX,BX,AX 19 | 20 | CALL GET_NEW_LOG_BLK ;LEAVE IN FAST MEMORY 21 | 22 | MOV DGROUP:[SI].ALLO_BLK_LIST,AX 23 | MOV DGROUP:[SI].ALLO_PTR.OFFS,0 24 | MOV DGROUP:[SI].ALLO_PTR.SEGM,AX 25 | MOV DGROUP:[SI].ALLO_CNT,PAGE_SIZE 26 | 27 | LEA 28 | FIXES 29 | LEA DI,ALLO_FIRST[SI] 30 | STOSW ;FIRST BLOCK 31 | XCHG AX,BX 32 | MOV AX,PAGE_SIZE-16 33 | STOSW ;BYTE COUNT LEFT 34 | MOV AX,16 35 | STOSW ;PTR.OFFS 36 | MOV AX,BX 37 | STOSW ;PTR.SEGM 38 | XOR AX,AX 39 | STOSW ;NB_PTR.OFFS 40 | MOV AX,BX 41 | STOSW 42 | MOV AX,8 ;NB_COUNT 43 | STOSW 44 | MOV ES,BX 45 | ASSUME ES:NOTHING 46 | CONV_ES 47 | XOR DI,DI 48 | MOV CX,8 49 | XOR AX,AX 50 | REP STOSW 51 | 52 | POPM AX,BX,CX,DI,ES 53 | ENDIF 54 | RET 55 | 56 | INIT_POOL ENDP 57 | 58 | END 59 | 60 | -------------------------------------------------------------------------------- /alloc/initpoolc.c: -------------------------------------------------------------------------------- 1 | 2 | void _init_pool() 3 | { 4 | } 5 | -------------------------------------------------------------------------------- /alloc/malloc.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | HANDLE heap; 4 | 5 | void *malloc(unsigned size) 6 | { 7 | if (!heap) 8 | heap = GetProcessHeap(); 9 | return HeapAlloc(heap, 0, size); 10 | } 11 | 12 | void *calloc(unsigned count, unsigned each) 13 | { 14 | if (!heap) 15 | heap = GetProcessHeap(); 16 | return HeapAlloc(heap, HEAP_ZERO_MEMORY, count * each); 17 | } 18 | 19 | void *realloc(void *oldp, unsigned size) 20 | { 21 | if (!heap) 22 | heap = GetProcessHeap(); 23 | if (!oldp) 24 | return malloc(size); 25 | if (!size) 26 | { free(oldp); 27 | return NULL; 28 | } 29 | return HeapReAlloc(heap, 0, oldp, size); 30 | } 31 | 32 | void free(void *p) 33 | { 34 | if (p) 35 | HeapFree(heap, 0, p); 36 | } 37 | -------------------------------------------------------------------------------- /alloc/minidata.asm: -------------------------------------------------------------------------------- 1 | TITLE MINIDATA - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | ; PUBLIC _release_minidata 6 | ; PUBLIC RELEASE_MINIDATA 7 | 8 | 9 | .CODE ROOT_TEXT 10 | 11 | EXTERNDEF _release_block:proc 12 | EXTERNDEF _release_minidata:proc 13 | 14 | ;_release_minidata proc 15 | ; mov EAX,4[ESP] 16 | ;_release_minidata endp 17 | 18 | RELEASE_MINIDATA PROC 19 | push EAX 20 | call _release_minidata 21 | add ESP,4 22 | ret 23 | 24 | ; 25 | ;EAX POINT TO ALLOCS STRUCTURE 26 | ; 27 | PUSH EDI 28 | ASSUME EAX:PTR ALLOCS_STRUCT 29 | MOV ECX,[EAX].ALLO_BLK_CNT 30 | 31 | PUSH ESI 32 | TEST ECX,ECX 33 | 34 | PUSH EBX 35 | MOV EBX,EAX 36 | ASSUME EAX:NOTHING,EBX:PTR ALLOCS_STRUCT 37 | 38 | JZ L9$ 39 | L1$: 40 | LEA EDI,[EBX].ALLO_BLK_LIST 41 | MOV ECX,8 42 | L2$: 43 | MOV EAX,[EDI] 44 | ADD EDI,4 45 | 46 | TEST EAX,EAX 47 | JZ L3$ 48 | 49 | push ECX 50 | push EAX 51 | call _release_block 52 | add ESP,4 53 | pop ECX 54 | 55 | DEC ECX 56 | JNZ L2$ 57 | L3$: 58 | ; 59 | ;ANY MORE LISTS OF BLOCKS? 60 | ; 61 | MOV ESI,[EBX].ALLO_LAST_LIST 62 | 63 | TEST ESI,ESI 64 | JZ L6$ 65 | 66 | MOV EAX,[ESI] 67 | ADD ESI,4 68 | 69 | MOV [EBX].ALLO_LAST_LIST,EAX 70 | LEA EDI,[EBX].ALLO_BLK_LIST 71 | 72 | MOV ECX,8 73 | 74 | REP MOVSD 75 | JMP L1$ 76 | 77 | L6$: 78 | LEA EDI,[EBX] 79 | MOV ECX,SIZE ALLOCS_STRUCT/4 80 | XOR EAX,EAX 81 | REP STOSD 82 | L9$: 83 | POPM EBX,ESI,EDI 84 | 85 | RET 86 | 87 | RELEASE_MINIDATA ENDP 88 | 89 | 90 | END 91 | 92 | -------------------------------------------------------------------------------- /alloc/minidatac.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | 5 | void _release_minidata(ALLOCS_STRUCT *a) 6 | { 7 | if (!a->ALLO_BLK_CNT) 8 | return; 9 | 10 | while (1) 11 | { 12 | for (int i = 0; i < 8; i++) 13 | { 14 | void *p = a->ALLO_BLK_LIST[i]; 15 | if (!p) 16 | break; 17 | _release_block(p); 18 | } 19 | 20 | // ANY MORE LISTS OF BLOCKS? 21 | void **ESI = a->ALLO_LAST_LIST; 22 | if (!ESI) 23 | break; 24 | a->ALLO_LAST_LIST = (void**)(*ESI++); 25 | memcpy(&a->ALLO_BLK_LIST[0], ESI, 8 * sizeof(int)); 26 | } 27 | 28 | memset(a, 0, sizeof(ALLOCS_STRUCT)); 29 | } 30 | -------------------------------------------------------------------------------- /appload/appload.mak: -------------------------------------------------------------------------------- 1 | !INCLUDE ..\COMMON\MAKEMACS 2 | 3 | FLAGS = $(MASMFLAGS) 4 | SRC = $(BASE)\SUBS 5 | 6 | 7 | 8 | ALL : $(BASE)\LIB\SLRLOAD.LIB $(BASE)\LIBNT\SLRLOAD.LIB $(BASE)\LIBDLL\SLRLOAD.LIB 9 | 10 | $(BASE)\LIB\SLRLOAD.LIB : NAPPLOAD.ASM 11 | call doit.bat 12 | 13 | $(BASE)\LIBNT\SLRLOAD.LIB : NAPPLOAD.ASM 14 | call doit.bat 15 | 16 | $(BASE)\LIBDLL\SLRLOAD.LIB : NAPPLOAD.ASM 17 | call doit.bat 18 | 19 | -------------------------------------------------------------------------------- /appload/bin2db.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/appload/bin2db.c -------------------------------------------------------------------------------- /appload/bin2db.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/appload/bin2db.exe -------------------------------------------------------------------------------- /appload/compress/back.bat: -------------------------------------------------------------------------------- 1 | pkz -u -xrtlink*.* -r -P b:norton *.* 2 | 3 | -------------------------------------------------------------------------------- /appload/compress/comp.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/appload/compress/comp.zip -------------------------------------------------------------------------------- /appload/compress/comp1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/appload/compress/comp1.zip -------------------------------------------------------------------------------- /appload/compress/ctest: -------------------------------------------------------------------------------- 1 | OBJ\COMP.OBJ COMP.ASM MACROS SLR32 2 | COMP,OBJ\COMP; 3 | 4 | ; OBJ\REXEPACK.OBJ REXEPACK.ASM MACROS 5 | ;REXEPACK,OBJ\REXEPACK; 6 | ; 7 | OBJ\C32.OBJ \NPROJ\COMMON\C32.ASM MACROS SLR32 8 | \NPROJ\COMMON\C32,OBJ\C32; 9 | 10 | ; OBJ\C32SLR.OBJ \NPROJ\COMMON\C32SLR.ASM MACROS SLR32 11 | ;\OPROJ\COMMON\C32SLR,OBJ\C32SLR; 12 | ; 13 | OBJ\C32QUIK.OBJ \NPROJ\COMMON\C32QUIK.ASM MACROS SLR32 14 | \NPROJ\COMMON\C32QUIK,OBJ\C32QUIK; 15 | 16 | ;; OBJ\CRC32.OBJ CRC32.ASM 17 | ;CRC32,OBJ\CRC32; 18 | ; 19 | OBJ\DATA.OBJ DATA.ASM MACROS 20 | DATA,OBJ\DATA; 21 | 22 | -------------------------------------------------------------------------------- /appload/compress/data.asm: -------------------------------------------------------------------------------- 1 | INCLUDE MACROS 2 | 3 | PUBLIC TEMP_RECORD 4 | 5 | .DATA? 6 | 7 | TEMP_RECORD DB TEMP_RECORD_SIZE+16 DUP(?) 8 | 9 | 10 | PUBLIC SLR_PREV_SEG,SLRBUF_PTR,NEXT_AVAIL,NEXT_AVAIL_2,COMPRESS_TABLE,COMPRESS_TABLE_LENGTH,PUTSTUFF_SMALL 11 | PUBLIC PUTSTUFF,SLR_FLUSHSTUFF,FIX_BUFFERS,SLR_NEXT_SEG,OLD_MATCHED_COUNT,OLD_OFFSET,INPTR,INCNT,INFILE_BYTES_LEFT 12 | PUBLIC SLR_CPOS,SLR_VARS,SLR_DATA,SLR_INBUF_LIMIT,SLR_WORD,NEW_REPT_ADDR,DONT_PACK,SEED_SIZE,ASCIZ0_HANDLE,ASCIZ0 13 | PUBLIC SLR_SCAN_LIMIT,DEL_INST_COUNT,SLR_DICT_COUNT,SLR_DICT2_COUNT,PUTBYTE_ADDR1,PUTBYTE_ADDR2,PUTBYTE_TEMP 14 | PUBLIC SLR_MASK,SLR_BYTES_LEFT,SLR_TMP_PTR,SLR_INPUT_PTR,HUF_PUT_PTR,ASCIZ1,ASCIZ1_HANDLE,PACK_BYTES_LEFT 15 | PUBLIC OUTBUF_BYTES_LEFT,OUTBUF_SIZE,OUTBUF_PTR,PACK_BYTES_PTR 16 | 17 | INPTR DW ? 18 | INCNT DW ? 19 | INFILE_BYTES_LEFT DD ? 20 | NEW_REPT_ADDR DD ? 21 | DONT_PACK DW ? 22 | SEED_SIZE DW ? 23 | ASCIZ0_HANDLE DW ? 24 | ASCIZ0 DB 64 DUP(?) 25 | ASCIZ1_HANDLE DW ? 26 | ASCIZ1 DB 64 DUP(?) 27 | PACK_BYTES_LEFT DW ? 28 | OUTBUF_BYTES_LEFT DW ? 29 | OUTBUF_SIZE DW ? 30 | OUTBUF_PTR DD ? 31 | PACK_BYTES_PTR DD ? 32 | 33 | SLR_PREV_SEG DW ? 34 | SLR_NEXT_SEG DW ? 35 | OLD_MATCHED_COUNT DW ? 36 | OLD_OFFSET DW ? 37 | SLRBUF_PTR DD ? 38 | SLR_BYTES_LEFT DD ? 39 | SLR_TMP_PTR DD ? 40 | SLR_INPUT_PTR DD ? 41 | HUF_PUT_PTR DD ? 42 | NEXT_AVAIL DW ? 43 | NEXT_AVAIL_2 DW ? 44 | SLR_CPOS DW ? 45 | SLR_VARS DW ? 46 | SLR_DATA DW ? 47 | SLR_INBUF_LIMIT DW ? 48 | SLR_WORD DW ? 49 | SLR_MASK DW ? 50 | SLR_SCAN_LIMIT DW ? 51 | DEL_INST_COUNT DW ? 52 | SLR_DICT_COUNT DW ? 53 | SLR_DICT2_COUNT DW ? 54 | PUTBYTE_ADDR1 DW ? 55 | PUTBYTE_ADDR2 DW ? 56 | PUTBYTE_TEMP DW ? 57 | 58 | COMPRESS_TABLE LABEL WORD 59 | PUTSTUFF_SMALL DW ? 60 | PUTSTUFF DW ? 61 | SLR_FLUSHSTUFF DW ? 62 | FIX_BUFFERS DW ? 63 | COMPRESS_TABLE_LENGTH EQU $-COMPRESS_TABLE 64 | 65 | DOFLAG MACRO FLAG 66 | PUBLIC FLAG 67 | FLAG DB ? 68 | NUM_FLAGS = NUM_FLAGS+1 69 | ENDM 70 | 71 | NUM_FLAGS = 0 72 | 73 | DOFLAG DICT_FULL 74 | DOFLAG DICT2_FULL 75 | DOFLAG OUTBUF_EXISTS 76 | DOFLAG NO_SLRPACKING_DONE 77 | DOFLAG COMP_FIRST_INPUT 78 | 79 | 80 | 81 | END 82 | 83 | -------------------------------------------------------------------------------- /appload/compress/db.bat: -------------------------------------------------------------------------------- 1 | MODE CO80 2 | OPTDEBUG -E -43 OBJ\COMP OBJ\COMP.OBJ COMP.ZIP 50 50 3 | VGA 80X50 4 | 5 | -------------------------------------------------------------------------------- /appload/compress/go.bat: -------------------------------------------------------------------------------- 1 | SET OPTASM=/zI/w/D_VM#1 /D_XR#1 /D_CV#1 /D_SV#1 /D_O2#0 /D_DF#0 /D_RM#0 /D_SG#0 /D_PL#0 /D_SP#1 /DJ#0 /D_PRODUCT#13 2 | OPTASM @CTEST 3 | IF NOT ERRORLEVEL 1 L 4 | 5 | -------------------------------------------------------------------------------- /appload/compress/l.bat: -------------------------------------------------------------------------------- 1 | CD OBJ 2 | OPTLINKS COMP * DATA/CO:2/XREF/MA; 3 | OPTCOMP COMP * DATA/QUI,COMPRESS; 4 | CD.. 5 | 6 | -------------------------------------------------------------------------------- /appload/db.bat: -------------------------------------------------------------------------------- 1 | MODE CO80 2 | OPTDEBUG -E -43 COMPRESS\OBJ\COMP NAPPLOAD.SYS NAPPLOAD.ZZZ 0X1F2 0 3 | VGA 80X50 4 | 5 | -------------------------------------------------------------------------------- /appload/doit.bat: -------------------------------------------------------------------------------- 1 | if not exist ..\LIB mkdir ..\LIB 2 | if not exist ..\LIBNT mkdir ..\LIBNT 3 | if not exist ..\LIBDLL mkdir ..\LIBDLL 4 | 5 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER#-1 /DCOMPRESS_PASS1#-1 /DCOMPRESS_PASS2#0 /DC_LEN#0 /DB_C_LEN#0 /DDEBUG#0 /L/N; 6 | OPTLINK NAPPLOAD/BI/MA; 7 | COMPRESS\OBJ\COMP NAPPLOAD.SYS NAPPLOAD.ZZZ 0X32 0X1F7 8 | BIN2DB NAPPLOAD.ZZZ COMPRESS.DAT 10 9 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER#-1 /DCOMPRESS_PASS1#0 /DCOMPRESS_PASS2#-1 /DDEBUG#0 /DC_LEN#1817 /DB_C_LEN#0B9CH,,napploa1/l/n; 10 | BIN2DB NAPPLOAD.OBJ SLRLOAD.DAT 11 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER#-1 /DCOMPRESS_PASS1#-1 /DCOMPRESS_PASS2#0 /DC_LEN#0 /DB_C_LEN#0 /DDEBUG#-1 ,,NAPPLOA2/L/N; 12 | OPTLINK NAPPLOAD/BI/MA; 13 | COMPRESS\OBJ\COMP NAPPLOAD.SYS NAPPLOAD.ZZZ 0X36 0X228 14 | DIR NAPPLOAD.ZZZ 15 | BIN2DB NAPPLOAD.ZZZ COMPRESS.DAT 10 16 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER#-1 /DCOMPRESS_PASS1#0 /DCOMPRESS_PASS2#-1 /DDEBUG#-1 /DC_LEN#2410 /DB_C_LEN#1132H; 17 | BIN2DB NAPPLOAD.OBJ SLRLOADB.DAT 18 | ML /DHOS=DOSX /c /Cp SLRLOAD.ASM 19 | OPTLIB ..\LIB\SLRLOAD ~+SLRLOAD; 20 | ML /DHOS=W32 /c /Cp SLRLOAD.ASM 21 | OPTLIB ..\LIBNT\SLRLOAD ~+SLRLOAD; 22 | ML /DHOS=W32D /c /Cp SLRLOAD.ASM 23 | OPTLIB ..\LIBDLL\SLRLOAD ~+SLRLOAD; 24 | DEL *.DAT 25 | DEL NAPPLOAD.OBJ 26 | DEL NAPPLOAD.SYS 27 | DEL NAPPLOAD.ZZZ 28 | DEL NAPPLOAD.MAP 29 | DEL SLRLOAD.OBJ 30 | 31 | -------------------------------------------------------------------------------- /appload/go.bat: -------------------------------------------------------------------------------- 1 | SET OPTASM=optasm 2 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER#-1 /DCOMPRESS_PASS1#-1 /DCOMPRESS_PASS2#0 /DC_LEN#0 /DB_C_LEN#0 /DDEBUG#0 /L/N; 3 | IF ERRORLEVEL 1 GOTO END 4 | OPTLINK NAPPLOAD/BI/MA; 5 | IF ERRORLEVEL 1 GOTO END 6 | EDIT NAPPLOAD.MAP 7 | EDIT GO.BAT 8 | COMPRESS\OBJ\COMP NAPPLOAD.SYS NAPPLOAD.ZZZ 0X32 0X1F7 9 | IF ERRORLEVEL 1 GOTO END 10 | DIR NAPPLOAD.ZZZ 11 | PAUSE 12 | BIN2DB NAPPLOAD.ZZZ COMPRESS.DAT 10 13 | IF ERRORLEVEL 1 GOTO END 14 | EDIT GO.BAT 15 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER#-1 /DCOMPRESS_PASS1#0 /DCOMPRESS_PASS2#-1 /DDEBUG#0 /DC_LEN#1817 /DB_C_LEN#0B9CH,,napploa1/l/n; 16 | IF ERRORLEVEL 1 GOTO END 17 | BIN2DB NAPPLOAD.OBJ SLRLOAD.DAT 18 | IF ERRORLEVEL 1 GOTO END 19 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER#-1 /DCOMPRESS_PASS1#-1 /DCOMPRESS_PASS2#0 /DC_LEN#0 /DB_C_LEN#0 /DDEBUG#-1 ,,NAPPLOA2/L/N; 20 | IF ERRORLEVEL 1 GOTO END 21 | OPTLINK NAPPLOAD/BI/MA; 22 | IF ERRORLEVEL 1 GOTO END 23 | EDIT NAPPLOAD.MAP 24 | EDIT GO.BAT 25 | COMPRESS\OBJ\COMP NAPPLOAD.SYS NAPPLOAD.ZZZ 0X36 0X228 26 | IF ERRORLEVEL 1 GOTO END 27 | DIR NAPPLOAD.ZZZ 28 | PAUSE 29 | BIN2DB NAPPLOAD.ZZZ COMPRESS.DAT 10 30 | IF ERRORLEVEL 1 GOTO END 31 | EDIT GO.BAT 32 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER#-1 /DCOMPRESS_PASS1#0 /DCOMPRESS_PASS2#-1 /DDEBUG#-1 /DC_LEN#2410 /DB_C_LEN#1132H; 33 | IF ERRORLEVEL 1 GOTO END 34 | BIN2DB NAPPLOAD.OBJ SLRLOADB.DAT 35 | IF ERRORLEVEL 1 GOTO END 36 | ML /DHOS=DOSX /c /Cp SLRLOAD.ASM 37 | IF ERRORLEVEL 1 GOTO END 38 | OPTLIB \p386\LIB\SLRLOAD ~+SLRLOAD; 39 | IF ERRORLEVEL 1 GOTO END 40 | 41 | ML /DHOS=W32 /c /Cp SLRLOAD.ASM 42 | IF ERRORLEVEL 1 GOTO END 43 | OPTLIB \p386\LIBNT\SLRLOAD ~+SLRLOAD; 44 | IF ERRORLEVEL 1 GOTO END 45 | 46 | ML /DHOS=W32D /c /Cp SLRLOAD.ASM 47 | IF ERRORLEVEL 1 GOTO END 48 | OPTLIB \p386\LIBDLL\SLRLOAD ~+SLRLOAD; 49 | IF ERRORLEVEL 1 GOTO END 50 | 51 | DEL *.DAT 52 | DEL NAPPLOAD.OBJ 53 | DEL NAPPLOAD.SYS 54 | DEL NAPPLOAD.ZZZ 55 | DEL NAPPLOAD.MAP 56 | IF ERRORLEVEL 1 GOTO END 57 | DEL SLRLOAD.OBJ 58 | 59 | :END 60 | 61 | -------------------------------------------------------------------------------- /appload/go1.bat: -------------------------------------------------------------------------------- 1 | NMAKE APPLOAD.MAK %1= 2 | 3 | 4 | -------------------------------------------------------------------------------- /appload/makefile: -------------------------------------------------------------------------------- 1 | # Use MAKE, not NMAKE 2 | 3 | #if not exist ..\LIB mkdir ..\LIB 4 | #if not exist ..\LIBNT mkdir ..\LIBNT 5 | #if not exist ..\LIBDLL mkdir ..\LIBDLL 6 | 7 | targets: ..\lib\slrload.lib ..\libnt\slrload.lib ..\libdll\slrload.lib 8 | 9 | bin2db.exe : bin2db.c 10 | sc bin2db 11 | 12 | slrload.dat: bin2db.exe 13 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER\#-1 /DCOMPRESS_PASS1\#-1 /DCOMPRESS_PASS2\#0 /DC_LEN\#0 /DB_C_LEN\#0 /DDEBUG\#0 /L/N; 14 | OPTLINK NAPPLOAD/BI/MA; 15 | COMPRESS\OBJ\COMP NAPPLOAD.SYS NAPPLOAD.ZZZ 0X32 0X1F7 16 | BIN2DB NAPPLOAD.ZZZ COMPRESS.DAT 10 17 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER\#-1 /DCOMPRESS_PASS1\#0 /DCOMPRESS_PASS2\#-1 /DDEBUG\#0 /DC_LEN\#1817 /DB_C_LEN\#0B9CH,,n1/l/n; 18 | BIN2DB NAPPLOAD.OBJ SLRLOAD.DAT 19 | 20 | slrloadb.dat: bin2db.exe 21 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER\#-1 /DCOMPRESS_PASS1\#-1 /DCOMPRESS_PASS2\#0 /DC_LEN\#0 /DB_C_LEN\#0 /DDEBUG\#-1 ,,N2/L/N; 22 | OPTLINK NAPPLOAD/BI/MA; 23 | COMPRESS\OBJ\COMP NAPPLOAD.SYS NAPPLOAD.ZZZ 0X36 0X228 24 | DIR NAPPLOAD.ZZZ 25 | BIN2DB NAPPLOAD.ZZZ COMPRESS.DAT 10 26 | OPTASM NAPPLOAD /DCOMPRESS_APPLOADER\#-1 /DCOMPRESS_PASS1\#0 /DCOMPRESS_PASS2\#-1 /DDEBUG\#-1 /DC_LEN\#2410 /DB_C_LEN\#1132H; 27 | BIN2DB NAPPLOAD.OBJ SLRLOADB.DAT 28 | 29 | ..\lib\slrload.lib: slrload.asm slrload.dat slrloadb.dat 30 | ML /DHOS=DOSX /c /Cp SLRLOAD.ASM 31 | OPTLIB ..\LIB\SLRLOAD ~+SLRLOAD; 32 | 33 | 34 | ..\libnt\slrload.lib: slrload.asm slrload.dat slrloadb.dat 35 | ML /DHOS=W32 /c /Cp SLRLOAD.ASM 36 | OPTLIB ..\LIBNT\SLRLOAD ~+SLRLOAD; 37 | 38 | ..\libdll\slrload.lib: slrload.asm slrload.dat slrloadb.dat 39 | ML /DHOS=W32D /c /Cp SLRLOAD.ASM 40 | OPTLIB ..\LIBDLL\SLRLOAD ~+SLRLOAD; 41 | 42 | clean: 43 | del bin2db.obj 44 | del bin2db.exe 45 | del bin2db.map 46 | del compress.dat 47 | del slrload.dat 48 | del slrloadb.dat 49 | del nappload.obj 50 | del nappload.sys 51 | del nappload.zzz 52 | del nappload.map 53 | del slrload.obj 54 | del napploa2.lst 55 | del nappload.lst 56 | del n1.lst 57 | del n2.lst 58 | -------------------------------------------------------------------------------- /appload/nappload.obj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/appload/nappload.obj -------------------------------------------------------------------------------- /appload/nappload.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/appload/nappload.sys -------------------------------------------------------------------------------- /appload/nappload.zzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/appload/nappload.zzz -------------------------------------------------------------------------------- /appload/optasm.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/appload/optasm.exe -------------------------------------------------------------------------------- /appload/optlib.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/appload/optlib.exe -------------------------------------------------------------------------------- /appload/optlink.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/appload/optlink.exe -------------------------------------------------------------------------------- /appload/slrload.asm: -------------------------------------------------------------------------------- 1 | 2 | INCLUDE ..\COMMON\MACROS 3 | 4 | 5 | .CODE PASS1_TEXT 6 | 7 | 8 | PUBLIC SLRLOAD_ENTRY,SLRLOAD_BOX_ENTRY 9 | 10 | SLRLOAD_ENTRY PROC 11 | ; 12 | ; 13 | ; 14 | MOV EAX,OFF SLRLOAD_OBJ 15 | MOV ECX,SLRLOAD_OBJ_LEN 16 | 17 | RET 18 | 19 | SLRLOAD_ENTRY ENDP 20 | 21 | 22 | SLRLOAD_BOX_ENTRY PROC 23 | ; 24 | ; 25 | ; 26 | MOV EAX,OFF SLRLOAD_BOX_OBJ 27 | MOV ECX,SLRLOAD_BOX_OBJ_LEN 28 | 29 | RET 30 | 31 | SLRLOAD_BOX_ENTRY ENDP 32 | 33 | 34 | .CONST 35 | 36 | SLRLOAD_OBJ LABEL BYTE 37 | 38 | INCLUDE SLRLOAD.DAT 39 | 40 | SLRLOAD_OBJ_LEN EQU $-SLRLOAD_OBJ 41 | 42 | 43 | SLRLOAD_BOX_OBJ LABEL BYTE 44 | 45 | INCLUDE SLRLOADB.DAT 46 | 47 | SLRLOAD_BOX_OBJ_LEN EQU $-SLRLOAD_BOX_OBJ 48 | 49 | 50 | END 51 | 52 | -------------------------------------------------------------------------------- /appload/slrload.obj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/appload/slrload.obj -------------------------------------------------------------------------------- /bugs/test.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | #define N 1610 7 | 8 | float a[N][N], b[N][N]; 9 | 10 | /* NASTY PROBLEM: if array c is not declared 'static', any reference to it in the code breaks 11 | DigitalMars linking!!*/ 12 | //static 13 | float c[2000][2000]; 14 | 15 | int main() 16 | { 17 | int i, j, k; 18 | float *pa, *pb, *pc; 19 | float tot = 0.0; 20 | 21 | pa=a[0]; 22 | pb=b[0]; 23 | for(i=0; i<5; ++i) 24 | { 25 | *pa++ = rand(); 26 | *pb++ = rand(); 27 | } 28 | 29 | pc=c[0]; 30 | tot += *pc++; 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /build.bat: -------------------------------------------------------------------------------- 1 | cd os2link 2 | nmake 3 | -------------------------------------------------------------------------------- /build_optlink.bat: -------------------------------------------------------------------------------- 1 | cd os2link 2 | nmake -nologo -f optdll.mak HOST_WIN32=1 %* OPTLINK 3 | cd .. 4 | -------------------------------------------------------------------------------- /checkin: -------------------------------------------------------------------------------- 1 | unzip -o ~/cbx/optlinkcsrc 2 | git commit -a -m "more" 3 | -------------------------------------------------------------------------------- /clean.bat: -------------------------------------------------------------------------------- 1 | 2 | del alloc\objnt\*.obj 3 | del common\objnt\*.obj 4 | del moves\objnt\*.obj 5 | del ntio\objnt\*.obj 6 | del parse\objnt\*.obj 7 | del subs\objnt\*.obj 8 | del os2link\objnt\*.obj os2link\objnt\*.map os2link\objnt\*.exe 9 | del overlays\objnt\*.obj 10 | del install\objnt\*.obj 11 | del exe\objnt\*.obj 12 | del cv\objnt\*.obj 13 | 14 | del alloc\lstnt\*.lst 15 | del common\lstnt\*.lst 16 | del moves\lstnt\*.lst 17 | del ntio\lstnt\*.lst 18 | del parse\lstnt\*.lst 19 | del subs\lstnt\*.lst 20 | del os2link\lstnt\*.lst 21 | del overlays\lstnt\*.lst 22 | del install\lstnt\*.lst 23 | del exe\lstnt\*.lst 24 | del cv\lstnt\*.lst 25 | 26 | del libnt\*.lib libnt\*.bak 27 | 28 | -------------------------------------------------------------------------------- /common/cextdef.asm: -------------------------------------------------------------------------------- 1 | TITLE CEXTDEF - Copyright (c) 1988-94 by SLR Systems 2 | 3 | INCLUDE MACROS 4 | INCLUDE SYMBOLS 5 | INCLUDE CDDATA 6 | 7 | PUBLIC CEXTDEF 8 | 9 | ; 10 | ; FOR FIXUPPS THAT REFERENCE COMDEFS... 11 | ; 12 | 13 | .DATA 14 | 15 | EXTERNDEF COMDAT_FLAGS:BYTE 16 | 17 | EXTERNDEF END_OF_RECORD:DWORD,BUFFER_OFFSET:DWORD 18 | 19 | EXTERNDEF SYMBOL_LARRAY:LARRAY_STRUCT,SYMBOL_GARRAY:STD_PTR_S 20 | 21 | 22 | .CODE PASS1_TEXT 23 | 24 | EXTERNDEF OBJ_PHASE:PROC,MYCOMDAT_INSTALL:PROC,COMDAT_INSTALL:PROC,STORE_XREF_ENTRY:PROC 25 | 26 | 27 | CEXTDEF1 PROC ;USES 28 | ; 29 | ;DS:SI IS RECORD POINTER 30 | ; 31 | ; JMP TEST_CEXT 32 | 33 | DOLONG C0 ;HANDLE INDEX >128 34 | 35 | CEXT_LOOP: 36 | NEXT_INDEX C0 ;LNAME INDEX 37 | 38 | MOV BUFFER_OFFSET,ESI 39 | CALL MYCOMDAT_INSTALL ;INSTALL OR FIND IN LOCAL TABLE 40 | ; 41 | ;EAX = LINDEX, ECX = PHYS 42 | ; 43 | ASSUME ECX:PTR MYCOMDAT_STRUCT 44 | MOV EBX,[ECX]._MCD_SYMBOL_GINDEX 45 | MOV EDI,ECX 46 | 47 | TEST EBX,EBX 48 | JNZ L2$ 49 | 50 | MOV COMDAT_FLAGS,BL ;ZERO 51 | CALL COMDAT_INSTALL ;EAX IS LNAME_INDEX, RETURN SYMBOL_GINDEX, ECX IS SYMBOL 52 | ASSUME ECX:PTR SYMBOL_STRUCT 53 | MOV EBX,EAX 54 | L1$: 55 | OR [ECX]._S_REF_FLAGS,MASK S_SOFT_REF 56 | if fg_xref 57 | GETT DL,XREF_OUT 58 | MOV AL,[ECX]._S_REF_FLAGS 59 | 60 | TEST DL,DL 61 | JZ L3$ 62 | 63 | AND AL,MASK S_SPACES ;LOCAL SYMBOL? 64 | JNZ L3$ 65 | 66 | MOV EAX,EBX 67 | CALL STORE_XREF_ENTRY 68 | L3$: 69 | endif 70 | ASSUME EDI:PTR MYCOMDAT_STRUCT 71 | MOV [EDI]._MCD_SYMBOL_GINDEX,EBX 72 | MOV EAX,EBX 73 | 74 | INSTALL_GINDEX_LINDEX SYMBOL_LARRAY ;STORE PLEASE 75 | 76 | SKIP_INDEX ;SKIP CODEVIEW INFORMATION 77 | 78 | CEXTDEF LABEL PROC 79 | 80 | TEST_CEXT: 81 | CMP END_OF_RECORD,ESI 82 | JA CEXT_LOOP 83 | 84 | JNZ ERROR 85 | 86 | RET 87 | 88 | L2$: 89 | ; 90 | ;INSTALL IN EXTDEF TABLE 91 | ; 92 | CONVERT ECX,EBX,SYMBOL_GARRAY 93 | JMP L1$ 94 | 95 | ERROR: 96 | CALL OBJ_PHASE 97 | RET 98 | 99 | CEXTDEF1 ENDP 100 | 101 | 102 | END 103 | 104 | -------------------------------------------------------------------------------- /common/classes: -------------------------------------------------------------------------------- 1 | .XLIST 2 | 3 | CLASS_STRUCT STRUC 4 | 5 | _C_NEXT_HASH_GINDEX DD ? ;NEXT CLASS - HASH ORDER 6 | _C_NEXT_CLASS_GINDEX DD ? ;PTR TO NEXT CLASS RECORD 7 | 8 | _C_FIRST_SEG_GINDEX DD ? ;PTR TO FIRST SEGMENT THIS CLASS 9 | _C_LAST_SEG_GINDEX DD ? ;PTR TO LAST SEGMENT THIS CLASS 10 | if fg_rom 11 | _C_BASE DD ? ;BASE ADDRESS IF ORG'ED 12 | _C_PHASE DD ? ;REAL CLASS PTR 13 | endif 14 | if any_overlays 15 | _C_SECTION_GINDEX DD ? ;ASSIGNED SECTION 16 | _C_PLTYPE DB ? ;OVERLAY FLAGS (PLTYPES) 17 | DB ? ;AVAIL 18 | endif 19 | _C_TYPE_FLAG DB ? ;SEG_FLAGS 20 | _C_ORDER_FLAG DB ? ;ORDERING FLAGS 21 | DW ? 22 | 23 | _C_HASH DD ? ;FOR FASTER SEARCHES 24 | _C_TEXT DD ? ;CLASS NAME 25 | 26 | CLASS_STRUCT ENDS 27 | 28 | .LIST 29 | 30 | -------------------------------------------------------------------------------- /common/csubs.asm: -------------------------------------------------------------------------------- 1 | TITLE CSUBS - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | if fg_slrpack 5 | INCLUDE SLR32 6 | 7 | 8 | PUBLIC SLR_MOVER 9 | 10 | 11 | .DATA 12 | 13 | EXTERNDEF SLR_INBUF_LIMIT:DWORD,SLR_BYTES_LEFT:DWORD,SLR_INPUT_PTR_OFFSET:DWORD,SLR_INPUT_PTR_BASE:DWORD 14 | 15 | 16 | .CODE PASS2_TEXT 17 | 18 | EXTERNDEF CONVERT_SUBBX_TO_EAX:PROC,RELEASE_BLOCK:PROC 19 | 20 | 21 | SLR_MOVER PROC 22 | ; 23 | ;USE SMALLER OF ECX AND BYTES_LEFT 24 | ; EDI IS DESTINATION 25 | ; 26 | PUSH ESI 27 | MOV EAX,SLR_BYTES_LEFT 28 | 29 | CMP EAX,ECX 30 | JAE L1$ 31 | 32 | MOV ECX,EAX 33 | L1$: 34 | ; 35 | ;MOVE ECX BYTES FROM SLR_INPUT_PTR TO EDI 36 | ; 37 | PUSH EBX 38 | MOV ESI,SLR_INPUT_PTR_OFFSET 39 | 40 | SUB EAX,ECX 41 | MOV EBX,SLR_INPUT_PTR_BASE 42 | 43 | MOV SLR_BYTES_LEFT,EAX 44 | L2$: 45 | ; 46 | ;NOW MOVE SMALLER OF PAGE_SIZE-ESI AND ECX 47 | ; 48 | MOV EAX,PAGE_SIZE 49 | 50 | SUB EAX,ESI 51 | 52 | CMP EAX,ECX 53 | JB L3$ 54 | 55 | MOV EAX,ECX 56 | L3$: 57 | PUSHM ECX,EAX 58 | 59 | MOV ECX,EAX 60 | CALL CONVERT_SUBBX_TO_EAX 61 | 62 | ADD ESI,EAX 63 | 64 | OPTI_MOVSB 65 | 66 | SUB ESI,EAX 67 | POPM EAX,ECX 68 | 69 | CMP ESI,PAGE_SIZE 70 | JNZ L4$ 71 | 72 | PUSH EAX 73 | XOR EDX,EDX 74 | 75 | MOV EAX,[EBX] 76 | CALL RELEASE_BLOCK 77 | 78 | MOV [EBX],EDX 79 | ADD EBX,4 80 | 81 | POP EAX 82 | MOV SLR_INPUT_PTR_BASE,EBX 83 | 84 | XOR ESI,ESI 85 | SUB ECX,EAX 86 | 87 | JNZ L2$ 88 | L4$: 89 | MOV SLR_INPUT_PTR_OFFSET,ESI 90 | MOV EAX,SLR_BYTES_LEFT 91 | ; 92 | ;IF SLR_BYTES_LEFT=0, RELEASE LAST BLOCK 93 | ; 94 | TEST EAX,EAX 95 | JNZ L5$ 96 | 97 | MOV EAX,[EBX] 98 | XOR EDX,EDX 99 | 100 | TEST EAX,EAX 101 | JZ L5$ 102 | 103 | MOV [EBX],EDX 104 | CALL RELEASE_BLOCK 105 | L5$: 106 | POPM EBX,ESI 107 | 108 | MOV SLR_INBUF_LIMIT,EDI 109 | 110 | RET 111 | 112 | SLR_MOVER ENDP 113 | 114 | endif 115 | 116 | END 117 | 118 | -------------------------------------------------------------------------------- /common/cvstuff: -------------------------------------------------------------------------------- 1 | .XLIST 2 | 3 | CVL_STRUCT STRUC 4 | 5 | _CVL_OFFSET DD ? 6 | _CVL_LINNUM DD ? 7 | _CVL_SRC_GINDEX DD ? 8 | DD ? ;MUST BE A POWER OF 2 ????? 9 | 10 | CVL_STRUCT ENDS 11 | 12 | 13 | CVL_BITS EQU 4 14 | 15 | 16 | CVH_STRUCT STRUC 17 | 18 | _SYMBOL_OFFSET DD ? 19 | _SYMBOL_HASH DD ? 20 | _SEGMENT_OFFSET DD ? 21 | _SEGMENT DD ? 22 | 23 | CVH_STRUCT ENDS 24 | 25 | 26 | CVH_BITS EQU 4 27 | 28 | 29 | CV_HASHES_STRUCT STRUC 30 | 31 | _SYMBOL_OFFSET DD ? 32 | _SYMBOL_HASH DD ? 33 | _SEGMENT_OFFSET DD ? 34 | _SEGMENT DD ? 35 | _NEXT_HASH DD ? 36 | _NEXT DD ? 37 | _PREV DD ? ;FOR 16-BIT COMPATIBILITY 38 | 39 | CV_HASHES_STRUCT ENDS 40 | 41 | 42 | CV_HASH_HDR_STRUCT STRUC 43 | 44 | _CVHH_SYMHASH DW ? 45 | _CVHH_ADDRHASH DW ? 46 | _CVHH_CBSYMBOL DD ? 47 | _CVHH_CBSYMHASH DD ? 48 | _CVHH_CBADDRHASH DD ? 49 | 50 | CV_HASH_HDR_STRUCT ENDS 51 | 52 | 53 | CV_NAMESP_STRUCT STRUC ;USES RELOC_STUFF AND RELOC_GARRAY... 54 | 55 | _CNS_NEXT_HASH_GINDEX DD ? ;NEXT SAME HASH 56 | _CNS_NEXT_GINDEX DD ? 57 | _CNS_OFFSET DD ? ;OFFSET IN OUTPUT NAMESPACE TABLE 58 | _CNS_HASH DD ? 59 | _CNS_TEXT DD ? 60 | 61 | CV_NAMESP_STRUCT ENDS 62 | 63 | 64 | .LIST 65 | 66 | -------------------------------------------------------------------------------- /common/cvstuff.h: -------------------------------------------------------------------------------- 1 | 2 | struct CVL_STRUCT 3 | { 4 | unsigned _CVL_OFFSET; 5 | unsigned _CVL_LINNUM; 6 | unsigned _CVL_SRC_GINDEX; 7 | unsigned reserved; // must be a power of 2 ????? 8 | }; 9 | 10 | #define CVL_BITS 4 11 | 12 | 13 | struct CVH_STRUCT 14 | { 15 | unsigned _SYMBOL_OFFSET; 16 | unsigned _SYMBOL_HASH; 17 | unsigned _SEGMENT_OFFSET; 18 | unsigned _SEGMENT; 19 | }; 20 | 21 | 22 | #define CVH_BITS 4 23 | 24 | 25 | struct CV_HASHES_STRUCT 26 | { 27 | unsigned _SYMBOL_OFFSET; 28 | unsigned _SYMBOL_HASH; 29 | unsigned _SEGMENT_OFFSET; 30 | unsigned _SEGMENT; 31 | struct CV_HASHES_STRUCT *_NEXT_HASH; 32 | struct CV_HASHES_STRUCT *_NEXT; 33 | struct CV_HASHES_STRUCT *_PREV; // for 16-bit compatibility 34 | }; 35 | 36 | 37 | struct CV_HASH_HDR_STRUCT 38 | { 39 | unsigned short _CVHH_SYMHASH; 40 | unsigned short _CVHH_ADDRHASH; 41 | unsigned _CVHH_CBSYMBOL; 42 | unsigned _CVHH_CBSYMHASH; 43 | unsigned _CVHH_CBADDRHASH; 44 | }; 45 | 46 | 47 | struct CV_NAMESP_STRUCT // uses RELOC_STUFF and RELOC_GARRAY 48 | { 49 | unsigned _CNS_NEXT_HASH_GINDEX; // next same hash 50 | unsigned _CNS_NEXT_GINDEX; 51 | unsigned _CNS_OFFSET; // offset in output namespace table 52 | unsigned _CNS_HASH; 53 | unsigned _CNS_TEXT; 54 | }; 55 | 56 | -------------------------------------------------------------------------------- /common/demangle.asm: -------------------------------------------------------------------------------- 1 | TITLE DEMANGLE - Copyright (C) SLR Systems 1992 2 | 3 | INCLUDE MACROS 4 | 5 | .CODE PASS2_TEXT 6 | 7 | DEMANGLE PROC 8 | ; 9 | ;TAKE STRING IN DS:SI AND DEMANGLE IT INTO ES:DI 10 | ;DS AND ES ARE DGROUP... 11 | ; 12 | MOV AL,2[SI] 13 | MOV CX,[SI] 14 | CMP AL,'?' 15 | JNZ 9$ 16 | ADD SI,3 17 | DEC CX 18 | 19 | -------------------------------------------------------------------------------- /common/errors.h: -------------------------------------------------------------------------------- 1 | #define OOM_ERR 7 2 | #define DISK_FULL_ERR 10 3 | #define UNRECOGNIZED_FIXUPP_FRAME_ERR 0x21 4 | #define CANT_REACH_ERR 0x23 5 | #define CREATESEM_ERR 0x38 6 | #define SEG_ALREADY_RELEASED_ERR 0x42 7 | #define FILE_EXP_ERR 0x76 8 | #define CVP_CIRC_NO_CSUE_ERR 0xA3 9 | #define IMPROBABLE_RES_ERR 0xB7 10 | 11 | 12 | void _err_inbuf_abort(int); 13 | void _error_undefined(struct SYMBOL_STRUCT *); 14 | -------------------------------------------------------------------------------- /common/fix2temp: -------------------------------------------------------------------------------- 1 | .ERR 2 | 3 | -------------------------------------------------------------------------------- /common/fixtemps: -------------------------------------------------------------------------------- 1 | .XLIST 2 | 3 | THREAD_STUFF_STRUCT STRUC 4 | 5 | FS_TYPE DD ? 6 | FS_INDEX DD ? 7 | FS_FILLER DD 2 DUP(?) ;FOR DETECTING DEFINED THREADS 8 | 9 | THREAD_STUFF_STRUCT ENDS 10 | 11 | FS_TYPE_SEGMENT EQU 0 12 | FS_TYPE_SEGMOD EQU 0 13 | FS_TYPE_GROUP EQU 1 14 | FS_TYPE_SYMBOL EQU 2 15 | FS_TYPE_ASEG EQU 3 16 | FS_TYPE_LOC EQU 4 17 | FS_TYPE_TARG EQU 5 18 | 19 | .LIST 20 | 21 | -------------------------------------------------------------------------------- /common/go.bat: -------------------------------------------------------------------------------- 1 | NMAKE COMMON.MAK %1= 2 | 3 | 4 | -------------------------------------------------------------------------------- /common/groups: -------------------------------------------------------------------------------- 1 | .XLIST 2 | GROUP_STRUCT STRUC 3 | 4 | _G_NEXT_HASH_GINDEX DD ? 5 | _G_NEXT_GROUP_GINDEX DD ? ;NEXT GROUP IN SOME LIST ORDER 6 | 7 | _G_FIRST_SEG_GINDEX DD ? 8 | _G_LAST_SEG_GINDEX DD ? 9 | _G_FRAME DD ? ;OFFSET AND 0FFF0H IF REAL MODE, ELSE SEGMENT # & FLAGS 10 | _G_OFFSET DD ? ;OFFSET FROM FRAME (0) - OR REAL ADDRESS FOR REAL MODE 11 | _G_LEN DD ? ;LENGTH... AFTER ALIGN 12 | 13 | _G_NUMBER DD ? ;GROUP NUMBER... FOR INTERNAL FIXUPPS AND CV NUMBERING 14 | _G_NEXT_CV_GINDEX DD ? ; 15 | 16 | if fg_prot 17 | _G_OS2_NUMBER EQU (_G_FRAME) 18 | _G_OS2_FLAGS DD ? 19 | endif 20 | 21 | if fg_plink 22 | _G_SECTION_INDEX DD ? 23 | _G_PLTYPE DB ? ;(PLTYPES RECORD) 24 | DB ? 25 | else 26 | DW ? 27 | endif 28 | 29 | _G_TYPE DB ? ;UNDEF, ASEG, RELOC, ETC 30 | _G_TYPE1 DB ? ;CODE OR DATA (GREC) 16/32, ETC 31 | 32 | _G_HASH DD ? 33 | _G_TEXT DD ? 34 | 35 | GROUP_STRUCT ENDS ;***** MUST BE EVEN WORDS ***** 36 | 37 | GREC RECORD GROUP_IS_USE16:1,GROUP_IS_USE32:1,GROUP_IS_FLAT:1,GROUP_IS_DGROUP:1,GROUP_IS_CODE:1,GROUP_IS_DATA:1 38 | 39 | .LIST 40 | -------------------------------------------------------------------------------- /common/groups.d: -------------------------------------------------------------------------------- 1 | 2 | struct GROUP_STRUCT 3 | { 4 | uint _G_NEXT_HASH_GINDEX; 5 | uint _G_NEXT_GROUP_GINDEX; //NEXT GROUP IN SOME LIST ORDER 6 | 7 | uint _G_FIRST_SEG_GINDEX; 8 | uint _G_LAST_SEG_GINDEX; 9 | uint _G_FRAME; //OFFSET AND 0FFF0H IF REAL MODE, ELSE SEGMENT # & FLAGS 10 | uint _G_OFFSET; //OFFSET FROM FRAME (0) - OR REAL ADDRESS FOR REAL MODE 11 | uint _G_LEN; //LENGTH... AFTER ALIGN 12 | 13 | uint _G_NUMBER; //GROUP NUMBER... FOR INTERNAL FIXUPPS AND CV NUMBERING 14 | uint _G_NEXT_CV_GINDEX; 15 | 16 | version (fg_prot) 17 | { 18 | _G_OS2_NUMBER = (_G_FRAME) 19 | uint _G_OS2_FLAGS; 20 | } 21 | 22 | version (fg_plink) 23 | { 24 | uint _G_SECTION_INDEX; 25 | ubyte _G_PLTYPE; //(PLTYPES RECORD) 26 | ubyte reserved; 27 | } 28 | else 29 | { 30 | ushort reserved; 31 | } 32 | 33 | ubyte _G_TYPE; //UNDEF, ASEG, RELOC, ETC 34 | ubyte _G_TYPE1; //CODE OR DATA (GREC) 16/32, ETC 35 | 36 | uint _G_HASH; 37 | uint _G_TEXT; 38 | 39 | } // ***** MUST BE EVEN WORDS ***** 40 | 41 | enum GREC 42 | { 43 | GROUP_IS_USE16:1, 44 | GROUP_IS_USE32:1, 45 | GROUP_IS_FLAT:1, 46 | GROUP_IS_DGROUP:1, 47 | GROUP_IS_CODE:1, 48 | GROUP_IS_DATA:1 49 | } 50 | -------------------------------------------------------------------------------- /common/groups.h: -------------------------------------------------------------------------------- 1 | 2 | typedef struct GROUP_STRUCT 3 | { 4 | unsigned _G_NEXT_HASH_GINDEX; 5 | unsigned _G_NEXT_GROUP_GINDEX; // NEXT GROUP IN SOME LIST ORDER 6 | 7 | unsigned _G_FIRST_SEG_GINDEX; 8 | unsigned _G_LAST_SEG_GINDEX; 9 | unsigned _G_FRAME; // OFFSET AND 0FFF0H IF REAL MODE, ELSE SEGMENT # & FLAGS 10 | unsigned _G_OFFSET; // OFFSET FROM FRAME (0) - OR REAL ADDRESS FOR REAL MODE 11 | unsigned _G_LEN; // LENGTH... AFTER ALIGN 12 | 13 | unsigned _G_NUMBER; // GROUP NUMBER... FOR INTERNAL FIXUPPS AND CV NUMBERING 14 | unsigned _G_NEXT_CV_GINDEX; 15 | 16 | #if fg_prot 17 | #define _G_OS2_NUMBER _G_FRAME 18 | unsigned _G_OS2_FLAGS; 19 | #endif 20 | 21 | #if fg_plink 22 | unsigned _G_SECTION_INDEX; 23 | unsigned char _G_PLTYPE; // (PLTYPES RECORD) 24 | unsigned char reserved1; 25 | #else 26 | unsigned short reserved2; 27 | #endif 28 | 29 | unsigned char _G_TYPE; // UNDEF, ASEG, RELOC, ETC 30 | unsigned char _G_TYPE1; // CODE OR DATA (GREC) 16/32, ETC 31 | 32 | unsigned _G_HASH; 33 | unsigned _G_TEXT; 34 | 35 | } GROUP_STRUCT; // ***** MUST BE EVEN WORDS ***** 36 | 37 | #define GROUP_IS_USE16 0x20 38 | #define GROUP_IS_USE32 0x10 39 | #define GROUP_IS_FLAT 8 40 | #define GROUP_IS_DGROUP 4 41 | #define GROUP_IS_CODE 2 42 | #define GROUP_IS_DATA 1 43 | -------------------------------------------------------------------------------- /common/grpdef.asm: -------------------------------------------------------------------------------- 1 | TITLE GRPDEF - Copyright (c) 1994 by SLR Systems 2 | 3 | INCLUDE MACROS 4 | INCLUDE SEGMENTS 5 | INCLUDE GROUPS 6 | INCLUDE CDDATA 7 | 8 | PUBLIC GRPDEF 9 | 10 | 11 | .DATA 12 | 13 | EXTERNDEF END_OF_RECORD:DWORD,BUFFER_OFFSET:DWORD,GROUP_NAME_LINDEX:DWORD,FLAT_GINDEX:DWORD 14 | 15 | EXTERNDEF GROUP_LARRAY:LARRAY_STRUCT,SEGMOD_LARRAY:LARRAY_STRUCT 16 | 17 | 18 | .CODE PASS1_TEXT 19 | 20 | EXTERNDEF OBJ_PHASE:PROC,GET_GROUP:PROC,PUT_SM_IN_GROUP:PROC,ERR_RET:PROC 21 | 22 | EXTERNDEF GRP_ERR:ABS 23 | 24 | 25 | GRPDEF PROC 26 | ; 27 | ;DS:SI OF COURSE IS GRPDEF RECORD POINTER... 28 | ; 29 | ;FIRST IS GROUP INDEX, FOLLOWED BY MULTIPLE DESCRIPTORS 30 | ; 31 | NEXT_INDEX L1 ;IN AX 32 | 33 | MOV GROUP_NAME_LINDEX,EAX 34 | MOV BUFFER_OFFSET,ESI 35 | 36 | CALL GET_GROUP ;EAX IS GROUP_MINDEX, ECX IS PHYS 37 | MOV EDI,EAX ;SAVE MASTER INDEX 38 | MOV BL,[ECX].GROUP_STRUCT._G_TYPE 39 | 40 | INSTALL_GINDEX_LINDEX GROUP_LARRAY 41 | 42 | AND BL,MASK SEG_RELOC + MASK SEG_ASEG 43 | JMP OBJ_CHECK 44 | 45 | DOLONG L1 46 | DOLONG L2 47 | 48 | SEG_LOOP: 49 | MOV AL,[ESI] 50 | INC ESI 51 | CMP AL,-1 52 | MOV BUFFER_OFFSET,ESI 53 | JNZ PHASE1 ;SKIP FF 54 | NEXT_INDEX L2 55 | ;CMP EAX,16K 56 | ;JA GRPDEF_MVIRDEF 57 | GRPDEF_NVIRDEF: 58 | CONVERT_LINDEX_EAX_EAX SEGMOD_LARRAY,EDX 59 | GRPDEF_NORMAL: 60 | MOV EDX,FLAT_GINDEX 61 | MOV CL,BL 62 | CMP EDI,EDX 63 | JZ GRPDEF_SKIP_FLAT 64 | MOV EDX,EDI 65 | CALL PUT_SM_IN_GROUP ;EDX=GROUP_MINDEX, ECX=G_TYPE, EAX=SEGMOD_MINDEX 66 | GRPDEF_SKIP_FLAT: 67 | 68 | OBJ_CHECK: 69 | CMP END_OF_RECORD,ESI 70 | JA SEG_LOOP 71 | JNE PHASE 72 | RET 73 | 74 | PHASE: CALL OBJ_PHASE 75 | RET 76 | 77 | PHASE1: 78 | MOV AX,GRP_ERR 79 | CALL ERR_RET 80 | RET 81 | 82 | GRPDEF_MVIRDEF: 83 | PUSH EAX 84 | CONVERT_MYCOMDAT_EAX_ECX 85 | POP EAX 86 | JC GRPDEF_NVIRDEF 87 | MOV EAX,[ECX].MYCOMDAT_STRUCT._MCD_SEGMOD_GINDEX 88 | JMP GRPDEF_NORMAL 89 | 90 | GRPDEF ENDP 91 | 92 | END 93 | 94 | -------------------------------------------------------------------------------- /common/grpdefc.asm: -------------------------------------------------------------------------------- 1 | ; Static Name Aliases 2 | ; 3 | TITLE grpdefc.c 4 | .8087 5 | INCLUDELIB MLIBCE 6 | INCLUDELIB OLDNAMES.LIB 7 | GRPDEFC_TEXT SEGMENT WORD PUBLIC 'CODE' 8 | GRPDEFC_TEXT ENDS 9 | _DATA SEGMENT WORD PUBLIC 'DATA' 10 | _DATA ENDS 11 | CONST SEGMENT WORD PUBLIC 'CONST' 12 | CONST ENDS 13 | _BSS SEGMENT WORD PUBLIC 'BSS' 14 | _BSS ENDS 15 | DGROUP GROUP CONST, _BSS, _DATA 16 | ASSUME DS: DGROUP, SS: DGROUP 17 | EXTRN @get_group:FAR 18 | EXTRN @next_index:FAR 19 | EXTRN @install_gindex_lindex:FAR 20 | EXTRN @next_obj_byte:FAR 21 | EXTRN @convert_lindex_gindex:FAR 22 | EXTRN @put_sm_in_group:FAR 23 | _BSS SEGMENT 24 | COMM NEAR _obj_record_bytes_left: BYTE: 2 25 | COMM NEAR _group_larray: BYTE: 2 26 | COMM NEAR _segmod_larray: BYTE: 2 27 | _BSS ENDS 28 | GRPDEFC_TEXT SEGMENT 29 | ASSUME CS: GRPDEFC_TEXT 30 | PUBLIC @grpdef 31 | @grpdef PROC FAR 32 | ; Line 16 33 | push bp 34 | mov bp,sp 35 | sub sp,2 36 | push si 37 | ; group_gindex = -2 38 | ; segmod_gindex = -4 39 | ; Line 20 40 | call FAR PTR @next_index 41 | call FAR PTR @get_group 42 | mov si,ax 43 | lea bx,WORD PTR _group_larray 44 | call FAR PTR @install_gindex_lindex 45 | ; Line 21 46 | cmp WORD PTR _obj_record_bytes_left,0 47 | jle $EX180 48 | $FC184: 49 | ; Line 22 50 | call FAR PTR @next_obj_byte 51 | cmp al,255 ;00ffH 52 | jne $EX180 53 | ; Line 24 54 | call FAR PTR @next_index 55 | lea bx,WORD PTR _segmod_larray 56 | call FAR PTR @convert_lindex_gindex 57 | mov dx,ax 58 | mov ax,si 59 | call FAR PTR @put_sm_in_group 60 | ; Line 25 61 | cmp WORD PTR _obj_record_bytes_left,0 62 | jg $FC184 63 | ; Line 27 64 | $EX180: 65 | pop si 66 | mov sp,bp 67 | pop bp 68 | ret 69 | nop 70 | 71 | @grpdef ENDP 72 | GRPDEFC_TEXT ENDS 73 | END 74 | -------------------------------------------------------------------------------- /common/grpdefc.c: -------------------------------------------------------------------------------- 1 | #define GINDEX int 2 | #define LINDEX int 3 | #define LARRAY int 4 | 5 | GINDEX get_group(LINDEX); 6 | LINDEX next_index(void); 7 | LINDEX install_gindex_lindex(GINDEX,LARRAY *); 8 | int obj_record_bytes_left; 9 | unsigned char next_obj_byte(void); 10 | GINDEX convert_lindex_gindex(LINDEX,LARRAY *); 11 | void put_sm_in_group(GINDEX,GINDEX); 12 | 13 | LARRAY group_larray,segmod_larray; 14 | 15 | 16 | void grpdef(){ 17 | GINDEX group_gindex,segmod_gindex; 18 | 19 | group_gindex=get_group(next_index()); 20 | install_gindex_lindex(group_gindex,& group_larray); 21 | while(obj_record_bytes_left > 0){ 22 | if(next_obj_byte() != 0xff) break; 23 | segmod_gindex=convert_lindex_gindex(next_index(),& segmod_larray); 24 | put_sm_in_group(group_gindex,segmod_gindex); 25 | } 26 | 27 | } 28 | 29 | -------------------------------------------------------------------------------- /common/japan.inc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/common/japan.inc -------------------------------------------------------------------------------- /common/library: -------------------------------------------------------------------------------- 1 | .XLIST 2 | 3 | LIBRARY_STRUCT STRUC 4 | 5 | _LS_NEXT_LIB_GINDEX DD ? ;NEXT LIBRARY PROBABLY FOR LRU 6 | _LS_PREV_LIB_GINDEX DD ? ;PREVIOUS LIBRARY 7 | _LS_NEXT_RLIB_GINDEX DD ? ;NEXT LIBRARY - REQUESTED ORDER 8 | _LS_PREV_RLIB_GINDEX DD ? ;I THINK NOT USED 9 | if fgh_inthreads 10 | _LS_NEXT_TRLIB_GINDEX DD ? ;NEXT LIBRARY - REQUESTED ORDER FOR THIS THREAD 11 | _LS_NEXT_TRLIB_BLOCK DD ? ;NEXT BLOCK FOR LIBREAD TO READ 12 | _LS_NEXT_REQUEST_BLOCK DD ? ;NEXT REQUEST BLOCK STORAGE SPOT 13 | ;_LS_HANDLE_SEM GLOBALSEM_STRUCT<> ;SEMAPHORE CONTROLLING ACCESS TO HANDLE 14 | endif 15 | 16 | _LS_BLOCKS_LEFT DD ? ;# OF BLOCKS YET TO READ 17 | _LS_BLOCKS DD ? ;TOTAL # OF PAGE_SIZE BLOCKS 18 | 19 | _LS_LIBNUM DD ? ;CV LIBRARY NUMBER 20 | _LS_NEXT_CV_GINDEX DD ? ;IN CODEVIEW ORDER... 21 | 22 | if fgh_inthreads 23 | _LS_OS2_BLOCKS_REQUESTED DD ? ;# OF BLOCKS FOR OS2 THREAD TO READ 24 | _LS_THREAD_LOCALS DD ? ;OWNING READ-THREAD 25 | endif 26 | 27 | _LS_MODULES DD ? ;TOTAL # OF MODULES THIS LIB 28 | _LS_MODULES_LEFT DD ? ;# OF MODULES NOT READ IN - I THINK NOT USED 29 | 30 | _LS_SELECTED_MODULES DD ? ;# UNREAD SELECTED MODULES 31 | _LS_HANDLE DD ? ;FILE HANDLE 32 | 33 | _LS_BLOCK_TABLE DD 4 DUP(?);PTR TO BLOCK TABLE - 4 BYTES PER BLOCK (MAYBE SEGMENT LIST IF TOO MANY BLOCKS) 34 | ; 35 | ;DD BLOCK_ADDRESS IF READ 36 | ;DD # OF MODULES UNPROCESSED IN THIS BLOCK 37 | ; 38 | _LS_FILE_POSITION DD ? ;CURRENT FILE-HANDLE POSITION 39 | _LS_MODULE_PTRS DD ? ;PTR TO MODULE OFFSETS - 4 BYTE OFFSETS. THIS IS PTR TO LIST OF BLOCKS IF >PAGE_SIZE/8 40 | _LS_FILE_LIST_GINDEX DD ? ;PTR TO ORIGINAL FILE_LIST ENTRY 41 | _LS_FIRST_EXTRN_GINDEX DD ? ;FIRST REQUESTED SYMBOL FOR THIS LIBRARY 42 | _LS_LAST_EXTRN_GINDEX DD ? ;LAST REQUESTED SYMBOL FOR THIS 43 | 44 | LIBRARY_STRUCT ENDS 45 | 46 | .LIST 47 | 48 | -------------------------------------------------------------------------------- /common/library.h: -------------------------------------------------------------------------------- 1 | 2 | typedef struct LIBRARY_STRUCT 3 | { 4 | struct LIBRARY_STRUCT *_LS_NEXT_LIB_GINDEX; // NEXT LIBRARY PROBABLY FOR LRU 5 | struct LIBRARY_STRUCT *_LS_PREV_LIB_GINDEX; // PREVIOUS LIBRARY 6 | struct LIBRARY_STRUCT *_LS_NEXT_RLIB_GINDEX; // NEXT LIBRARY - REQUESTED ORDER 7 | int _LS_PREV_RLIB_GINDEX; // I THINK NOT USED 8 | #if fgh_inthreads 9 | struct LIBRARY_STRUCT *_LS_NEXT_TRLIB_GINDEX; // NEXT LIBRARY - REQUESTED ORDER FOR THIS THREAD 10 | int *_LS_NEXT_TRLIB_BLOCK; // NEXT BLOCK FOR LIBREAD TO READ 11 | unsigned *_LS_NEXT_REQUEST_BLOCK; // NEXT REQUEST BLOCK STORAGE SPOT 12 | // _LS_HANDLE_SEM GLOBALSEM_STRUCT<> // SEMAPHORE CONTROLLING ACCESS TO HANDLE 13 | #endif 14 | 15 | int _LS_BLOCKS_LEFT; // # OF BLOCKS YET TO READ 16 | unsigned _LS_BLOCKS; // TOTAL # OF PAGE_SIZE BLOCKS 17 | 18 | int _LS_LIBNUM; // CV LIBRARY NUMBER 19 | struct LIBRARY_STRUCT *_LS_NEXT_CV_GINDEX; // IN CODEVIEW ORDER... 20 | 21 | #if fgh_inthreads 22 | int _LS_OS2_BLOCKS_REQUESTED; // # OF BLOCKS FOR OS2 THREAD TO READ 23 | struct MYL2_STRUCT *_LS_THREAD_LOCALS; // OWNING READ-THREAD 24 | #endif 25 | 26 | int _LS_MODULES; // TOTAL # OF MODULES THIS LIB 27 | int _LS_MODULES_LEFT; // # OF MODULES NOT READ IN - I THINK NOT USED 28 | 29 | int _LS_SELECTED_MODULES; // # UNREAD SELECTED MODULES 30 | void *_LS_HANDLE; // FILE HANDLE 31 | 32 | void *_LS_BLOCK_TABLE[4]; // PTR TO BLOCK TABLE - 4 BYTES PER BLOCK (MAYBE SEGMENT LIST IF TOO MANY BLOCKS) 33 | // 34 | // DD BLOCK_ADDRESS IF READ 35 | // DD # OF MODULES UNPROCESSED IN THIS BLOCK 36 | // 37 | int _LS_FILE_POSITION; // CURRENT FILE-HANDLE POSITION 38 | void **_LS_MODULE_PTRS; // PTR TO MODULE OFFSETS - 4 BYTE OFFSETS. THIS IS PTR TO LIST OF BLOCKS IF >PAGE_SIZE/8 39 | struct FILE_LIST_STRUCT *_LS_FILE_LIST_GINDEX; // PTR TO ORIGINAL FILE_LIST ENTRY 40 | struct SYMBOL_STRUCT *_LS_FIRST_EXTRN_GINDEX; // FIRST REQUESTED SYMBOL FOR THIS LIBRARY 41 | int _LS_LAST_EXTRN_GINDEX; // LAST REQUESTED SYMBOL FOR THIS 42 | } LIBRARY_STRUCT; 43 | 44 | extern struct LIBRARY_STRUCT *CURNLIB_GINDEX; 45 | 46 | -------------------------------------------------------------------------------- /common/makemacs: -------------------------------------------------------------------------------- 1 | BASE = .. 2 | #D:\P386 3 | 4 | !IFNDEF DM 5 | DM = \dm 6 | !ENDIF 7 | 8 | # SLR tools: 9 | # BUILD_LIB = OPTLIB /OKMULTI /PA:32 $@ ~+ $(OBJ)\*; 10 | # DM tools: 11 | BUILD_LIB = $(DM)\bin\lib -c -p32 $@ $** 12 | 13 | !IFDEF HOST_WIN32 14 | 15 | LST = .\LSTNT 16 | OBJ = .\OBJNT 17 | MASMFLAGS = /DHOS=W32 18 | LIB = $(BASE)\LIBNT 19 | 20 | !ELSE 21 | !IFDEF HOST_DOSX 22 | 23 | LST = .\LST 24 | OBJ = .\OBJ 25 | MASMFLAGS = /DHOS=DOSX 26 | LIB = $(BASE)\LIB 27 | 28 | !ELSE 29 | !IFDEF HOST_WIN32DLL 30 | 31 | LST = .\LSTDLL 32 | OBJ = .\OBJDLL 33 | MASMFLAGS = /DHOS=W32D 34 | LIB = $(BASE)\LIBDLL 35 | 36 | !ENDIF 37 | !ENDIF 38 | !ENDIF 39 | 40 | !IFDEF DEBUG 41 | # NOTE: `/Zd` is used as `/Zi` causes linking problems 42 | MASMDEBUGFLAGS = /Zd 43 | DMCDEBUGFLAGS = -g 44 | !ELSE 45 | MASMDEBUGFLAGS = 46 | DMCDEBUGFLAGS = 47 | !ENDIF 48 | 49 | # MASM 5: 50 | # MASMFLAGS = $(MASMFLAGS) /c /Cp /Fl$(LST)\ /Sn /Zi /Fo$(OBJ)\ /I$(BASE)\COMMON 51 | # MASM 10: problems linking when assembling with debug info 52 | MASMFLAGS = $(MASMFLAGS) /omf /c /Cp /Fl$(LST)\ /Sn $(MASMDEBUGFLAGS) /Fo$(OBJ)\ /I$(BASE)\COMMON 53 | 54 | DMCFLAGS=-I..\common -r $(DMCDEBUGFLAGS) 55 | -------------------------------------------------------------------------------- /common/maptemp: -------------------------------------------------------------------------------- 1 | .XLIST 2 | .LIST 3 | -------------------------------------------------------------------------------- /common/modend.asm: -------------------------------------------------------------------------------- 1 | TITLE MODEND - Copyright (c) 1994 SLR Systems 2 | 3 | INCLUDE MACROS 4 | INCLUDE SYMBOLS 5 | INCLUDE SEGMENTS 6 | INCLUDE MODULES 7 | INCLUDE FIXTEMPS 8 | 9 | PUBLIC MODEND,MODEND32 10 | 11 | 12 | .DATA 13 | 14 | EXTERNDEF REFERENCE_FLAGS:BYTE 15 | 16 | EXTERNDEF END_OF_RECORD:DWORD,DEFAULT_SIZE:DWORD,MODEND_OWNER_GINDEX:DWORD,MODEND_ADDRESS:DWORD 17 | 18 | EXTERNDEF MODULE_GARRAY:STD_PTR_S 19 | 20 | 21 | .CODE PASS1_TEXT 22 | 23 | EXTERNDEF PRELIM:PROC,MODEND_RETURN:PROC,OBJ_PHASE:PROC,FIXUPP_MODEND:PROC,STORE_OPTIMAL_MODEND:PROC 24 | EXTERNDEF FIXUPP_STORE:PROC,WARN_ASCIZ_RET:PROC 25 | 26 | EXTERNDEF DUP_MODEND_ERR:ABS 27 | 28 | MODEND32: 29 | MOV CL,MASK BIT_32 30 | JMP MODEND_CONT 31 | 32 | MODEND PROC 33 | ; 34 | ;DS:SI IS RECORD 35 | ; 36 | ;HANDLE MOD_TYP AND OPTIONAL START ADDRESS 37 | ; 38 | if fg_phar 39 | MOV CL,BPTR DEFAULT_SIZE 40 | else 41 | MOV CL,0 42 | endif 43 | 44 | MODEND_CONT:: 45 | MOV AL,[ESI] 46 | INC ESI 47 | 48 | ADD ESP,4 ;OLD RETURN ADDRESSES 49 | TEST AL,40H ;IS THERE A STARTUP ADDRESS? 50 | 51 | MOV EDX,END_OF_RECORD 52 | JNZ MODEND_FIX ;YES, JUMP 53 | 54 | CMP EDX,ESI 55 | JNZ OBJ_E 56 | MOD1: 57 | JMP MODEND_RETURN 58 | 59 | OBJ_E: 60 | CALL OBJ_PHASE 61 | JMP MOD1 62 | 63 | MODEND_FIX: 64 | ; 65 | ;STORE LIKE FIXUPP 66 | ; 67 | CMP EDX,ESI 68 | JBE OBJ_E 69 | ; 70 | ;IS THERE ALREADY A START ADDRESS? 71 | ; 72 | MOV EAX,MODEND_OWNER_GINDEX 73 | XOR CH,CH 74 | 75 | TEST EAX,EAX 76 | JNZ MODEND_DUP 77 | 78 | MOV AL,MASK S_HARD_REF 79 | RESS LAST_DATA_COMDAT,CH 80 | 81 | MOV REFERENCE_FLAGS,AL 82 | CALL FIXUPP_MODEND 83 | 84 | JMP MOD1 85 | 86 | MODEND_DUP: 87 | BITT IGNORE_DUP_STARTS 88 | JNZ MOD1 89 | CONVERT EAX,EAX,MODULE_GARRAY 90 | LEA ECX,[EAX].MODULE_STRUCT._M_TEXT 91 | MOV AL,DUP_MODEND_ERR 92 | CALL WARN_ASCIZ_RET ;PHYSICAL NAME IN ECX 93 | JMP MOD1 94 | 95 | MODEND ENDP 96 | 97 | 98 | END 99 | 100 | -------------------------------------------------------------------------------- /common/nbkpat.asm: -------------------------------------------------------------------------------- 1 | TITLE NBKPAT - Copyright (c) SLR Systems 1994 2 | SUBTTL Contains Confidential and Proprietary material 3 | 4 | INCLUDE MACROS 5 | INCLUDE CDDATA 6 | 7 | PUBLIC NBKPAT,NBKPAT32 8 | 9 | 10 | .DATA 11 | 12 | EXTERNDEF CLASS_TYPE:BYTE 13 | 14 | EXTERNDEF END_OF_RECORD:DWORD,FORREF_TYPE:DWORD,LDATA_SEGMOD_GINDEX:DWORD 15 | 16 | EXTERNDEF SEGMOD_GARRAY:STD_PTR_S 17 | 18 | 19 | .CODE PASS1_TEXT 20 | 21 | EXTERNDEF MYCOMDAT_INSTALL:PROC,FORREF_CONT:PROC 22 | 23 | ; 24 | ; DB TYPE LOCATION TYPE TO FIX UP 25 | ; 26 | ; INDEX PUBLIC NAME LNAME REFERENCE TO THIS GUY 27 | ; 28 | ; NEXT UP TO MANY BYTES OF DATA 29 | ; 30 | 31 | NBKPAT32 PROC 32 | ; 33 | ; 34 | ; 35 | MOV AL,MASK BIT_32+MASK BIT_FR 36 | JMP NBKPAT1 37 | 38 | NBKPAT32 ENDP 39 | 40 | NBKPAT PROC 41 | ; 42 | ;DS:SI IS DATA RECORD 43 | ; 44 | MOV AL,MASK BIT_FR 45 | NBKPAT1:: 46 | MOV AH,[ESI] 47 | INC ESI 48 | 49 | MOV WPTR FORREF_TYPE,AX 50 | 51 | NEXT_INDEXI 52 | ; 53 | ;THROW-AWAY CRITERIA - 54 | ; 55 | ; 1. THROW AWAY IF ZERO-LENGTH 56 | ; 2. THROW AWAY IF NOT KEEPING THIS COMDAT INSTANCE 57 | ; 58 | MOV ECX,END_OF_RECORD ;SKIP IF ZERO-LENGTH 59 | 60 | SUB ECX,ESI 61 | JBE L9$ 62 | 63 | MOV EDI,ECX 64 | CALL MYCOMDAT_INSTALL ;EAX IS INDEX, ECX IS PHYSICAL 65 | ASSUME ECX:PTR MYCOMDAT_STRUCT 66 | 67 | MOV DL,[ECX]._MCD_FLAGS 68 | MOV EAX,[ECX]._MCD_SEGMOD_GINDEX 69 | 70 | AND DL,MASK MCD_KEEPING_THIS 71 | JZ L9$ ;SKIP IF NOT KEEPING THIS INSTANCE 72 | 73 | MOV LDATA_SEGMOD_GINDEX,EAX 74 | CONVERT EAX,EAX,SEGMOD_GARRAY 75 | ASSUME EAX:PTR CDSEGMOD_STRUCT 76 | MOV AL,[EAX]._CDSM_SMFLAGS ;FOR CODE-DATA DETERMINATION 77 | 78 | MOV ECX,EDI 79 | MOV CLASS_TYPE,AL 80 | 81 | JMP FORREF_CONT 82 | 83 | L9$: 84 | RET 85 | 86 | NBKPAT ENDP 87 | 88 | 89 | END 90 | 91 | -------------------------------------------------------------------------------- /common/newlib.asm: -------------------------------------------------------------------------------- 1 | TITLE LIBRARY - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | INCLUDE SYMBOLS 6 | INCLUDE LIBRARY 7 | INCLUDE WIN32DEF 8 | 9 | PUBLIC PROCESS_LIBRARIES,CLOSE_LIB_FILES 10 | 11 | 12 | .CODE PASS1_TEXT 13 | 14 | externdef _process_libraries:proc 15 | externdef _close_lib_files:proc 16 | 17 | 18 | PROCESS_LIBRARIES PROC 19 | jmp _process_libraries 20 | PROCESS_LIBRARIES ENDP 21 | 22 | CLOSE_LIB_FILES PROC 23 | jmp _close_lib_files 24 | CLOSE_LIB_FILES ENDP 25 | 26 | END 27 | 28 | -------------------------------------------------------------------------------- /common/opreadt.asm: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /common/optlnk.asm: -------------------------------------------------------------------------------- 1 | TITLE OPTLNK - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE INITCODE 5 | INCLUDE IO_STRUC 6 | INCLUDE WIN32DEF 7 | INCLUDE WINMACS 8 | 9 | PUBLIC OPTLINK 10 | 11 | .DATA 12 | 13 | .CODE ROOT_TEXT 14 | 15 | EXTERNDEF _optlink:proc 16 | EXTERNDEF _optlink_restartc:proc 17 | EXTERNDEF _abort:proc 18 | EXTERNDEF XCNOTIFY:PROC 19 | 20 | 21 | ;This is left here to cause optlnk.obj to be pulled in from the library 22 | public _optlink_restart 23 | _optlink_restart PROC 24 | jmp _optlink_restartc 25 | _optlink_restart ENDP 26 | 27 | 28 | public main 29 | main PROC 30 | INITCODE0 31 | call _optlink 32 | main ENDP 33 | 34 | 35 | OPTLINK EQU main 36 | 37 | 38 | END OPTLINK 39 | 40 | -------------------------------------------------------------------------------- /common/optlnkc.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "all.h" 5 | 6 | void LNKINIT(); 7 | void PASS1_STUFF(); 8 | void MIDDLE_STUFF(); 9 | void PASS2_STUFF(); 10 | 11 | void _optlink() 12 | { 13 | LNKINIT(); 14 | 15 | // command lines all read, ready to go... 16 | // start at head of OBJ_LIST and process OBJ_FILES 17 | 18 | PASS1_STUFF(); // reads objs and libs 19 | 20 | MIDDLE_STUFF(); // org segs and publics, etc 21 | 22 | PASS2_STUFF(); // fixup and relocate 23 | 24 | // NEED TO WAIT FOR ANY OUTPUT THREADS TO FINISH... 25 | 26 | // WAIT FOR MAP THREAD TO FINISH 27 | 28 | if (_HOST_THREADED) 29 | { 30 | if (!MAP_THREAD_HANDLE) 31 | goto L7; 32 | WaitForSingleObject(MAP_THREAD_HANDLE, -1); 33 | _close_handle(MAP_THREAD_HANDLE); 34 | MAP_THREAD_HANDLE = 0; 35 | } 36 | if (MAPFILE_GINDEX) 37 | { 38 | // FLUSH LAST BUFFER OF MAP FILE 39 | MAP_FLUSHED = 0xFF; 40 | _flush_trunc_close(MAP_DEVICE); 41 | } 42 | L7: ; 43 | _NO_CANCEL_FLAG = 0xFF; 44 | _abort(); 45 | } 46 | 47 | void _optlink_restartc() 48 | { 49 | _err_abort(FATAL_RESTART_ERR); 50 | } 51 | 52 | void CLEAN_UP() 53 | { 54 | CLEAN_UP_IN_PROGRESS = 0xFF; 55 | } 56 | -------------------------------------------------------------------------------- /common/personal.asm: -------------------------------------------------------------------------------- 1 | TITLE 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC PERSONALITY 6 | 7 | 8 | 9 | .CODE 10 | 11 | PERSONALITY PROC 12 | 13 | RET 14 | 15 | PERSONALITY ENDP 16 | 17 | END 18 | 19 | -------------------------------------------------------------------------------- /common/quiktemp: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /common/relocss: -------------------------------------------------------------------------------- 1 | .XLIST 2 | RELOC_STRUCT STRUC 3 | 4 | _RL_NEXT_HASH_GINDEX DD ? ;NEXT RELOC SAME HASH 5 | _RL_NEXT_RELOC_GINDEX DD ? ;RELOC ORDER... 6 | _RL_SEG_OFFSET DD ? ;OFFSET IN CURRENT SEGMENT OF LAST REFERENCE 7 | _RL_TARG_OFFSET DD ? ;OFFSET FROM TARGET SEGMENT 8 | _RL_OS2_NUMBER DD ? ;TARGET SEGMENT # 9 | _RL_FLAGS DD ? ;RELOC TYPE JUNK 10 | 11 | RELOC_STRUCT ENDS 12 | 13 | _RL_IMP_OFFSET EQU _RL_TARG_OFFSET 14 | _RL_IMP_MODULE EQU _RL_OS2_NUMBER 15 | 16 | .LIST 17 | 18 | -------------------------------------------------------------------------------- /common/sections: -------------------------------------------------------------------------------- 1 | .XLIST 2 | 3 | AREA_STRUCT STRUC 4 | 5 | _AREA_FIRST_SECT_GINDEX DD ? ;FIRST SECTION THIS AREA 6 | _AREA_NEXT_AREA_GINDEX DD ? ;NEXT AREA SAME LEVEL 7 | _AREA_PARENT_SECT_GINDEX DD ? ; 8 | _AREA_LEVEL DD ? ; 9 | _AREA_BASE_ADDRESS DD ? ; 10 | _AREA_MAX_ADDRESS DD ? ;EQU _AREA_LAST_SECTION 11 | _AREA_LAST_OUTFILE_GINDEX DD ? ;OUTFILE LAST USED BY THIS AREA 12 | _AREA_LAST_SECT_GINDEX DD ? ;LAST SECTION THIS AREA 13 | _AREA_FORCE_SIZE DD ? ;SIZE CAN BE FORCED BY CMDLINE 14 | 15 | AREA_STRUCT ENDS 16 | 17 | SECTION_STRUCT STRUC 18 | 19 | _SECT_NEXT_SECT_GINDEX DD ? ;NEXT SECTION SAME AREA 20 | _SECT_NEXT_SECTION_GINDEX DD ? ;NEXT SECTION REFERENCED ORDER... 21 | _SECT_RELOCS DD ? ;# RELOCS THIS SECTION 22 | _SECT_NUMBER DD ? ;THIS SECTION NUMBER 23 | 24 | _SECT_FIRST_AREA_GINDEX DD ? ;FIRST AREA UNDER THIS SECTION 25 | _SECT_FIRST_SEGMOD_GINDEX DD ? ;FIRST SEGMOD ASSIGNED THIS SECTION 26 | 27 | _SECT_NAME DD ? ;LNAME POINTER IF NAME ASSIGNED 28 | 29 | _SECT_OUTFILE_GINDEX DD ? ;_OF_ POINTER TO OUTPUT FILE 30 | 31 | _SECT_FLAGS DB ? ;PRELOAD, SLRPACKED, CACHEABLE. RELOCS, CACHED, IN-MEMORY 32 | DB ? 33 | DW ? 34 | 35 | _SECT_FILE_SIZE DD ? ;SECTION SIZE ON DISK IN PARAGRAPHS (INCLUDING RELOCS) 36 | _SECT_PARENT_AREA_GINDEX DD ? ;AREA I BELONG IN 37 | 38 | _SECT_CHILDREN DD ? ;NUMBER OF CHILD SECTIONS 39 | _SECT_LAST_CLONE_GINDEX DD ? ;FOR AUTOSECTION USE 40 | 41 | _SECT_FILE_ADDRESS DD ? ;OFFSET IN OUTFILE 42 | 43 | _SECT_LAST_SEGMOD_GINDEX DD ? ;LAST SEGMOD ASSIGNED THIS SECTION 44 | _SECT_LAST_AREA_GINDEX DD ? ;LAST AREA UNDER THIS SECTION 45 | 46 | _SECT_BASE_ADDRESS EQU _SECT_LAST_SEGMOD_GINDEX 47 | _SECT_MAX_ADDRESS EQU _SECT_CHILDREN 48 | 49 | SECTION_STRUCT ENDS 50 | 51 | .LIST 52 | 53 | -------------------------------------------------------------------------------- /common/sects: -------------------------------------------------------------------------------- 1 | .XLIST 2 | FNAME_SIZE EQU 16 3 | 4 | OVLINIT_STACKSIZE EQU 100H 5 | 6 | SECTION_FLAGS RECORD SECT_AUTOSECT:1,SECT_SLRPACK:1,SECT_CODEVIEW:1,SECT_IN_MEMORY:1,SECT_CACHEABLE:1,SECT_PRELOAD:1,SEXE_FILE_NUMBER:2 7 | 8 | SECT_EXE_STRUCT STRUC 9 | ; 10 | ;STRUCTURE AS IT APPEARS IN EXE FILE AT RUN TIME 11 | ; 12 | if fg_plink 13 | _SEXE_LOAD_PARA DW ? ;LOAD ADDRESS FOR MODULE 14 | _SEXE_END_PARA DW ? ;END OF MY AREA 15 | endif 16 | _SEXE_FILE_PARA DB 3 DUP(?) ;PARA ADDRESS IN FILE 17 | _SEXE_FLAGS DB ? ;PRELOAD, CACHEABLE, CACHED, IN-MEMORY, COMPRESSED, RELOCS 18 | if fg_plink 19 | _SEXE_PARENT_OFFSET DW ? 20 | _SEXE_FILE_OFFSET DW ? ;OFFSET TO FILE 21 | endif 22 | 23 | SECT_EXE_STRUCT ENDS 24 | 25 | SLRCODE_STRUCT STRUC 26 | 27 | $$SLR_FIRST_AVAIL DW ? ;FIRST AVAILABLE PARAGRAPH 28 | $$SLR_SECT_SIZE DW ? ;SIZE OF SECTION ENTRY 29 | $$SLR_NSECTS DW ? ;NUMBER OF SECTIONS 30 | $$SLR_NVECTS DW ? ;NUMBER OF VECTORS 31 | $$SLR_RELOAD_STACK_BASE DW ? ;OFFSET IN 'SECTIONS' OF RELOAD STACK 32 | $$SLR_RELOAD_STACK_SIZE DW ? 33 | ;$$SLR_RELOAD_TYPE DW ? 34 | $$SLR_MAIN DD ? ;START ADDRESS... 35 | $$SLR_CACHE_BLOCKS_NEEDED DW ? 36 | $$SLR_EMS_TABLE DW 3 DUP(?) 37 | $$SLR_XMS_TABLE DW 3 DUP(?) 38 | $$SLR_REG_TABLE DW 3 DUP(?) 39 | $$SLR_UMB_TABLE DW 3 DUP(?) 40 | $$SLR_INT_NUMBER DW ? 41 | $$SLR_SEXE_FILE_OFFSET DW ? ;OFFSET TO FILE POINTER 42 | 43 | $$SLR_NEAR_SEGMENT DW ? ;SEGMENT USED BY SMALL-MODEL OVERLAYS 44 | $$SLR_RELOAD_JUMP DW ? ;ADDRESS OF FAR JUMP TO RELOAD CODE... 45 | 46 | $$SLR_DATA_AREA DW ? 47 | $$SLR_DATA_SECTION DW ? 48 | $$SLR_OVERLAY_AREA DW ? 49 | $$SLR_TIME_WD DW ? 50 | $$SLR_DATE_WD DW ? 51 | $$SLR_ROOT_ENVIRONMENT_LEGAL DB ? ;USE NAME FROM ENVIRONMENT 52 | DB ? 53 | 54 | $$SLR_PSP DW ? 55 | $$SLR_PSP_10 DW ? 56 | $$SLR_LAST_SECTION_LOADED DW ? 57 | $$SLR_BUFFER DW ? ;PARAGRAPH ADDRESS OF 'BUFFER' 58 | $$SLR_OLD_TERMINATE DD ? 59 | $$SLR_OLD_INT_ADDRESS DD ? ;INT VECTOR BEFORE WE TOOK IT... 60 | $$SLR_TERM_FLAGS DB ? 61 | DB ? 62 | $$SLR_HEADER_DELTA DW ? ;CHANGE IN HEADER SIZE IN PARAGRAPHS 63 | 64 | SLRCODE_STRUCT ENDS 65 | 66 | CACHE_RECORD RECORD MINI_PERCENT:1,MAXI_PERCENT:1 67 | .LIST 68 | -------------------------------------------------------------------------------- /common/semaphor.asm: -------------------------------------------------------------------------------- 1 | .386 2 | 3 | .MODEL FLAT 4 | 5 | 6 | .CODE 7 | 8 | PUBLIC INIT_EAX,CAPTURE_EAX,RELEASE_EAX 9 | 10 | 11 | GLOBALSEM_STRUCT STRUC 12 | 13 | _SEM_ITSELF DD ? 14 | _SEM_COUNTER DD ? 15 | 16 | GLOBALSEM_STRUCT ENDS 17 | 18 | 19 | INIT_EAX PROC 20 | ; 21 | ;EAX IS PTR TO GLOBALSEM_STRUCT 22 | ; 23 | PUSH EBX 24 | MOV EBX,EAX 25 | ASSUME EBX:PTR GLOBALSEM_STRUCT 26 | 27 | PUSH 0 ;NO NAME 28 | PUSH 1 ;MAX COUNT 29 | 30 | PUSH 0 ;INITIAL COUNT 31 | PUSH 0 ;NO SECURITY 32 | 33 | CALL _CreateSemaphoreA 34 | 35 | TEST EAX,EAX 36 | JZ L9$ 37 | 38 | MOV [EBX]._SEM_COUNTER,-1 39 | 40 | MOV [EBX]._SEM_ITSELF,EAX 41 | POP EBX 42 | 43 | RET 44 | 45 | L9$: 46 | MOV AL,CREATESEM_ERR 47 | CALL ERR_ABORT 48 | 49 | INIT_EAX ENDP 50 | 51 | 52 | 53 | CAPTURE_EAX PROC 54 | ; 55 | ; 56 | ; 57 | ASSUME EAX:PTR GLOBALSEM_STRUCT 58 | 59 | INC [EAX]._SEM_COUNTER ;MUST BE ATOMIC 60 | JZ L1$ 61 | 62 | MOV EAX,[EAX]._SEM_ITSELF ;HANDLE FOR THIS SEMAPHORE 63 | JS L1$ 64 | 65 | TEST EAX,EAX ;THIS WAY IT WORKS UNDER WIN32S 66 | JZ L1$ 67 | 68 | PUSH EDX 69 | PUSH ECX 70 | 71 | PUSH -1 ;WAIT FOREVER 72 | PUSH EAX 73 | 74 | CALL _WaitForSingleObject 75 | 76 | POP ECX 77 | POP EDX 78 | 79 | INC EAX 80 | JZ L9$ ;ERROR 81 | L1$: 82 | RET 83 | 84 | L9$: 85 | MOV AL,_TIMEOUT_ERR 86 | CALL ERR_ABORT 87 | 88 | CAPTURE_EAX ENDP 89 | 90 | 91 | RELEASE_EAX PROC 92 | ; 93 | ; 94 | ; 95 | DEC [EAX]._SEM_COUNTER ;MUST BE ATOMIC 96 | JNS L1$ 97 | 98 | RET 99 | 100 | L1$: 101 | MOV EAX,[EAX]._SEM_ITSELF 102 | PUSH EDX 103 | 104 | TEST EAX,EAX ;THIS WAY IT WORKS UNDER WIN32S 105 | JZ L9$ 106 | 107 | PUSH ECX 108 | PUSH 0 ;I DON'T WANT PREVIOUS COUNT 109 | 110 | PUSH 1 ;INCREASE COUNT BY 1 111 | PUSH EAX 112 | 113 | CALL _ReleaseSemaphore 114 | 115 | POP ECX 116 | L9$: 117 | POP EDX 118 | 119 | RET 120 | 121 | RELEASE_EAX ENDP 122 | 123 | 124 | END 125 | 126 | -------------------------------------------------------------------------------- /common/strtmap.asm: -------------------------------------------------------------------------------- 1 | TITLE STRTMAP - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE EXES 5 | 6 | PUBLIC ALLOW_START_MAP,DO_START_ADDRESS 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF MAPFILE_GINDEX:DWORD,MODEND_ADDRESS:DWORD,WM_START_ADDR:DWORD 12 | 13 | EXTERNDEF START_DEFINED_SEM:QWORD,NEXEHEADER:NEXE,PEXEHEADER:PEXE 14 | 15 | 16 | .CODE PASS2_TEXT 17 | 18 | EXTERNDEF _capture_eax:proc 19 | EXTERNDEF _release_eax:proc 20 | EXTERNDEF _release_eax_bump:proc 21 | EXTERNDEF HEXWOUT:PROC,HEADER_OUT:PROC,CAPTURE_EAX:PROC,RELEASE_EAX:PROC 22 | 23 | 24 | ALLOW_START_MAP PROC 25 | ; 26 | ; 27 | ; 28 | if fgh_mapthread 29 | BITT _HOST_THREADED 30 | JZ DO_START_ADDRESS 31 | 32 | RELEASE START_DEFINED_SEM 33 | 34 | RET 35 | endif 36 | 37 | ALLOW_START_MAP ENDP 38 | 39 | 40 | DO_START_ADDRESS PROC 41 | ; 42 | ;IF START ADDRESS SPECIFIED 43 | ; 44 | MOV EAX,MAPFILE_GINDEX 45 | 46 | OR EAX,EAX 47 | JZ L9$ 48 | 49 | CMP MODEND_ADDRESS,0 50 | JZ L9$ 51 | 52 | CAPTURE START_DEFINED_SEM 53 | YIELD ;SO STOP WORKS 54 | 55 | MOV EDI,OFF EPM_CS 56 | XOR EDX,EDX 57 | if fg_pe 58 | BITT OUTPUT_PE 59 | 60 | MOV EAX,PEXEHEADER._PEXE_ENTRY_RVA 61 | JNZ L5$ 62 | endif 63 | INC EDX 64 | if fg_segm 65 | BITT OUTPUT_SEGMENTED 66 | 67 | MOV EAX,NEXEHEADER._NEXE_CSIP 68 | JNZ L5$ 69 | endif 70 | if fg_norm_exe 71 | MOV EAX,WM_START_ADDR 72 | endif 73 | L5$: 74 | PUSH EAX 75 | 76 | SHR EAX,16 77 | CALL HEXWOUT 78 | 79 | POP EAX 80 | ADD EDI,EDX 81 | 82 | CALL HEXWOUT 83 | 84 | TEST EDX,EDX 85 | JNZ L6$ 86 | 87 | MOV AL,' ' 88 | STOSB 89 | L6$: 90 | 91 | MOV EAX,OFF ENTRY_POINT_MSG 92 | CALL HEADER_OUT 93 | L9$: 94 | RET 95 | 96 | DO_START_ADDRESS ENDP 97 | 98 | 99 | .DATA 100 | 101 | ENTRY_POINT_MSG DB SIZEOF ENTRY_POINT_MSG-1+SIZEOF EPM_CS+SIZEOF EPM_IP,0DH,0AH,'Program entry point at ' 102 | EPM_CS DB '0000:' 103 | EPM_IP DB '0000',0DH,0AH 104 | 105 | END 106 | 107 | -------------------------------------------------------------------------------- /common/symcmacs: -------------------------------------------------------------------------------- 1 | .XLIST 2 | 3 | TOOLMSG_VERSION EQU 2 4 | VERSION_TOOLCALLBACKS EQU 3 5 | 6 | NETSPAWN_VERSION EQU TOOLMSG_VERSION + VERSION_TOOLCALLBACKS 7 | 8 | TOOL_CALLBACKS_STRUCT STRUC 9 | 10 | _TCB_VERSION DD ? ;CALLBACK STRUCTURE VERSION NUMBER 11 | _TCB_REPORT_PROGRESS DD ? ; 12 | _TCB_REPORT_OUTPUT DD ? ; 13 | _TCB_REPORT_MESSAGE DD ? ; 14 | _TCB_REPORT_TARGET DD ? ; 15 | _TCB_REPORT_FILE DD ? ; 16 | _TCB_REPORT_ACTIVITY DD ? ; 17 | _TCB_STACK_MODE DD ? ; 18 | _TCB_YIELD_MODE DD ? ; 19 | _TCB_LINEREPORT_MODE DD ? ; 20 | 21 | TOOL_CALLBACKS_STRUCT ENDS 22 | 23 | YIELD_OFTEN EQU 0 24 | YIELD_MODERATE EQU 1 25 | YIELD_NEVER EQU 2 26 | 27 | 28 | EMSG_UNDEFINED EQU 0 29 | EMSG_CONTINUE EQU 0 30 | EMSG_WARNING EQU 1 31 | EMSG_ERROR EQU 2 32 | EMSG_FATAL_ERROR EQU 3 33 | EMSG_INFORMATIONAL EQU 4 34 | EMSG_TOOL_CMDLINE EQU 16 35 | EMSG_LINKER_EXPORT EQU 48 36 | 37 | K_NOLINENUMBER EQU -1 38 | K_NOCOLNUMBER EQU -1 39 | K_NOMSGNUMBER EQU 0 40 | K_CLOSELEVEL EQU -1 41 | K_YIELD_ON EQU 4 42 | 43 | TOOL_MESSAGE_STRUCT STRUC 44 | 45 | _TMSG_VERSION DD TOOLMSG_VERSION 46 | _TMSG_MSGTEXT DD ? 47 | _TMSG_MSGTYPE DD ? ;VERIFIED 48 | _TMSG_FILENAME DD ? 49 | _TMSG_LINENUMBER DD ? 50 | _TMSG_COLNUMBER DW ? 51 | _TMSG_MSGNUMBER DW ? 52 | 53 | TOOL_MESSAGE_STRUCT ENDS 54 | 55 | 56 | TOOL_DATA_STRUCT STRUC 57 | 58 | _TDS_ACTIVITY DD ? ;TXT FAR PTR 59 | _TDS_TITLE DD ? ; 60 | _TDS_COPYRIGHT DD ? ; 61 | _TDS_TOOLVERSION DD ? 62 | 63 | TOOL_DATA_STRUCT ENDS 64 | 65 | .LIST 66 | 67 | -------------------------------------------------------------------------------- /common/theadr.c: -------------------------------------------------------------------------------- 1 | void theadr(void) 2 | { 3 | i=nextbyte(); 4 | theadr_temp_len=i; 5 | movebytes(i,theadr_temp); 6 | 7 | if (!found_theadr) { 8 | found_theadr=TRUE; 9 | if (in_library) { 10 | strip_path_ext(); 11 | } 12 | } 13 | curn_theadr=NULL; 14 | } 15 | 16 | 17 | -------------------------------------------------------------------------------- /common/unexe.dat: -------------------------------------------------------------------------------- 1 | db 085h,000h,087h,0C0h,006h,057h,01Eh,056h,052h,051h 2 | db 053h,050h,09Ch,0FCh,08Ch,0C2h,083h,0C2h,010h,016h 3 | db 007h,00Eh,01Fh,001h,016h,048h,001h,001h,016h,04Ch 4 | db 001h,033h,0F6h,033h,0FFh,0B9h,0AAh,000h,0F3h,0A5h 5 | db 006h,0B8h,031h,000h,050h,0BDh,001h,000h,0CBh,0FDh 6 | db 08Bh,01Eh,04Eh,001h,0B9h,000h,010h,03Bh,0D9h,077h 7 | db 002h,08Bh,0CBh,02Bh,0D9h,08Ch,0D8h,02Bh,0C1h,08Eh 8 | db 0D8h,08Ch,0C0h,02Bh,0C1h,08Eh,0C0h,003h,0C9h,003h 9 | db 0C9h,003h,0C9h,08Bh,0F9h,04Fh,003h,0FFh,08Bh,0F7h 10 | db 0F3h,0A5h,00Bh,0DBh,075h,0D6h,0FCh,006h,01Fh,08Dh 11 | db 075h,002h,08Eh,0C2h,033h,0FFh,02Eh,0A1h,050h,001h 12 | db 0EBh,05Ah,09Dh,058h,05Bh,059h,05Ah,05Eh,01Fh,05Fh 13 | db 007h,0FAh,02Eh,08Eh,016h,048h,001h,02Eh,08Bh,026h 14 | db 046h,001h,0FBh,090h,02Eh,0FFh,02Eh,04Ah,001h,02Dh 15 | db 0FFh,09Fh,091h,0ADh,085h,0FDh,075h,004h,0F3h,0ABh 16 | db 0EBh,029h,0AAh,086h,0C4h,049h,0F3h,0ABh,0AAh,0EBh 17 | db 020h,0ADh,091h,0E3h,0CBh,006h,057h,0ADh,003h,0C2h 18 | db 08Eh,0C0h,0ADh,097h,0ADh,003h,0C2h,047h,08Bh,0D8h 19 | db 026h,087h,05Dh,0FFh,08Bh,0FBh,047h,075h,0F5h,0E2h 20 | db 0EDh,05Fh,007h,00Bh,0F6h,078h,02Ah,00Bh,0FFh,078h 21 | db 033h,0ADh,00Bh,0F6h,078h,03Bh,00Bh,0C0h,079h,044h 22 | db 03Dh,000h,0A0h,072h,054h,03Dh,000h,0E0h,072h,0AFh 23 | db 040h,074h,0C2h,02Dh,000h,0E0h,091h,0A5h,0A5h,083h 24 | db 0EEh,004h,0E2h,0F9h,083h,0C6h,004h,0EBh,0D2h,081h 25 | db 0EEh,000h,080h,08Ch,0D8h,005h,000h,008h,08Eh,0D8h 26 | db 0EBh,0C9h,081h,0EFh,000h,080h,08Ch,0C0h,005h,000h 27 | db 008h,08Eh,0C0h,0EBh,0C0h,081h,0EEh,000h,080h,08Ch 28 | db 0D9h,080h,0C5h,008h,08Eh,0D9h,0EBh,0B8h,091h,041h 29 | db 085h,0F5h,075h,00Ah,0D1h,0E9h,0F3h,0A5h,013h,0C9h 30 | db 0F3h,0A4h,0EBh,09Bh,0A4h,0E2h,0F3h,0EBh,096h,02Dh 31 | db 0FFh,07Fh,091h,0ACh,08Ah,0E0h,085h,0FDh,075h,00Ah 32 | db 0D1h,0E9h,0F3h,0ABh,013h,0C9h,0F3h,0AAh,0EBh,081h 33 | db 0AAh,0E2h,0F3h,0E9h,07Bh,0FFh 34 | -------------------------------------------------------------------------------- /common/unexe.sys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/common/unexe.sys -------------------------------------------------------------------------------- /common/unexe2.asm: -------------------------------------------------------------------------------- 1 | TITLE UNEXE2 - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | 6 | PUBLIC EXEUNPACK,EXEPACK_PARAS,PACK_LEN,START_ADR,INITIAL_COUNT,EXEUNPACK_START 7 | PUBLIC STACK_ADR 8 | 9 | 10 | .DATA 11 | 12 | EXEUNPACK_START LABEL BYTE 13 | 14 | EXEUNPACK EQU ($+2) 15 | 16 | INCLUDE UNEXE.DAT 17 | 18 | STACK_ADR DD ? 19 | START_ADR DD ? 20 | EXEPACK_PARAS DW ? 21 | INITIAL_COUNT DW ? 22 | 23 | PACK_LEN EQU $-EXEUNPACK_START 24 | 25 | 26 | END 27 | 28 | -------------------------------------------------------------------------------- /common/winmacs: -------------------------------------------------------------------------------- 1 | .XLIST 2 | 3 | ASCIZMSG MACRO XX,YY 4 | LOCAL L1,L2 5 | PUSHM EDX,ECX,EAX 6 | 7 | PUSH 10010H 8 | PUSH YY 9 | PUSH OFF L1 10 | PUSH 0 11 | 12 | CALL MessageBox 13 | 14 | POPM EAX,ECX,EDX 15 | JMP L2 16 | 17 | L1 DB XX 18 | 19 | L2: 20 | ENDM 21 | 22 | 23 | ALLMSG MACRO XX,YY 24 | LOCAL L1,L2 25 | IFB 26 | PUSHM EDX,ECX,EAX 27 | 28 | PUSH 10010H ;fuStyle 29 | PUSH 0 30 | PUSH OFF L2 31 | PUSH 0 32 | 33 | ; EXTERNDEF _MessageBoxA:NEAR 34 | 35 | CALL MessageBox 36 | 37 | POPM EAX,ECX,EDX 38 | JMP L1 39 | 40 | L2 DB XX,0 41 | 42 | L1: 43 | ELSE 44 | PUSHM ES,DI,DX,CX,BX,AX 45 | SUB SP,6 46 | MOV AX,SS 47 | MOV ES,AX 48 | MOV AX,YY 49 | MOV DI,SP 50 | SOFT EXTF HEXWOUT 51 | CALL HEXWOUT 52 | XOR AX,AX 53 | STOSW 54 | SUB DI,6 55 | PUSHM 0,CS,OFF L2,SS,DI,MB_OK 56 | CALL MESSAGEBOX 57 | ADD SP,6 58 | POPM AX,BX,CX,DX,DI,ES 59 | JMP L1 60 | 61 | L2 DB XX,0 62 | 63 | L1: 64 | ENDIF 65 | 66 | ENDM 67 | if debug 68 | DEBMSG EQU ALLMSG 69 | else 70 | DEBMSG MACRO XX,YY 71 | ENDM 72 | endif 73 | 74 | .LIST 75 | 76 | -------------------------------------------------------------------------------- /common/writemap.asm: -------------------------------------------------------------------------------- 1 | TITLE WRITEMAP - Copyright (c) SLR Systems 1991 2 | END 3 | 4 | -------------------------------------------------------------------------------- /cv/ccnt.bat: -------------------------------------------------------------------------------- 1 | ML /DHOS=W32 /c /Cp /Fl.\LSTNT\ /Sn /Zi /Fo.\OBJNT\ /I..\COMMON ..\CV\CVFILALL.ASM 2 | -------------------------------------------------------------------------------- /cv/cvmodall.asm: -------------------------------------------------------------------------------- 1 | TITLE CVMODALL - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE MODULES 5 | 6 | PUBLIC CV_MODULES_ALL_4 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF CURNMOD_GINDEX:DWORD,FIRST_MODULE_GINDEX:DWORD,CURNMOD_NUMBER:DWORD 12 | 13 | EXTERNDEF MODULE_GARRAY:STD_PTR_S 14 | 15 | 16 | .CODE PASS2_TEXT 17 | 18 | EXTERNDEF CV_MODULE_4:PROC 19 | 20 | 21 | CV_MODULES_ALL_4 PROC 22 | ; 23 | ;OUTPUT ALL MODULE RECORDS AND THEIR INDEXES 24 | ; 25 | MOV EAX,FIRST_MODULE_GINDEX 26 | JMP MOD_NEXT 27 | 28 | MOD_LOOP: 29 | CALL CV_MODULE_4 30 | 31 | MOV EAX,CURNMOD_GINDEX 32 | CONVERT EAX,EAX,MODULE_GARRAY 33 | ASSUME EAX:PTR MODULE_STRUCT 34 | 35 | MOV EAX,[EAX]._M_NEXT_MODULE_GINDEX 36 | MOD_NEXT: 37 | MOV ECX,CURNMOD_NUMBER 38 | MOV CURNMOD_GINDEX,EAX 39 | 40 | INC ECX 41 | TEST EAX,EAX 42 | 43 | MOV CURNMOD_NUMBER,ECX 44 | JNZ MOD_LOOP 45 | 46 | MOV CURNMOD_NUMBER,EAX 47 | 48 | RET 49 | 50 | CV_MODULES_ALL_4 ENDP 51 | 52 | 53 | END 54 | 55 | -------------------------------------------------------------------------------- /cv/go.bat: -------------------------------------------------------------------------------- 1 | NMAKE CV.MAK %1= 2 | 3 | -------------------------------------------------------------------------------- /cv/txtomf.asm: -------------------------------------------------------------------------------- 1 | TITLE TXTOMF - Copyright (C) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC MOVE_TEXT_TO_OMF,MOVE_DSSIAX_TO_NEWOMF,MOVE_NEWOMF_ASCIZ 6 | 7 | 8 | .CODE PASS2_TEXT 9 | 10 | MOVE_TEXT_TO_OMF PROC 11 | ; 12 | ;RETURNS LENGTH IN EAX 13 | ; 14 | PUSHM ESI,EDI 15 | 16 | LEA ECX,[EDI+2] 17 | INC EDI 18 | L11$: 19 | MOV EAX,[ESI] 20 | ADD ESI,4 21 | 22 | MOV [EDI],EAX 23 | ADD EDI,4 24 | 25 | OR AL,AL 26 | JZ L13$ 27 | 28 | OR AH,AH 29 | JZ L14$ 30 | 31 | TEST EAX,00FF0000H 32 | JZ L15$ 33 | 34 | TEST EAX,0FF000000H 35 | JNZ L11$ 36 | 37 | MOV EAX,EDI 38 | L12$: 39 | MOV EDI,EAX 40 | SUB EAX,ECX 41 | 42 | CMP EAX,255 43 | JA L3$ 44 | 45 | ADD ESP,8 46 | MOV [ECX-2],AL 47 | 48 | DEC EDI 49 | 50 | RET 51 | 52 | L13$: 53 | LEA EAX,[EDI-3] 54 | JMP L12$ 55 | 56 | L14$: 57 | LEA EAX,[EDI-2] 58 | JMP L12$ 59 | 60 | L15$: 61 | LEA EAX,[EDI-1] 62 | JMP L12$ 63 | 64 | L3$: 65 | POPM EDI,ESI 66 | ; JMP MOVE_DSSIAX_TO_NEWOMF 67 | 68 | MOVE_TEXT_TO_OMF ENDP 69 | 70 | 71 | MOVE_DSSIAX_TO_NEWOMF PROC 72 | ; 73 | ;DS:SI POINTS TO STRING 74 | ;AX IS STRING LENGTH 75 | ;ES:DI IS DESTINATION 76 | ; 77 | MOV ECX,EAX 78 | MOV [EDI],AL 79 | 80 | CMP EAX,255 81 | JA L5$ 82 | 83 | INC EDI 84 | 85 | OPTI_MOVSB 86 | 87 | RET 88 | 89 | L5$: 90 | MOV DPTR [EDI],0FFH 91 | 92 | MOV [EDI+2],EAX 93 | ADD EDI,4 94 | 95 | OPTI_MOVSB 96 | 97 | RET 98 | 99 | MOVE_DSSIAX_TO_NEWOMF ENDP 100 | 101 | 102 | MOVE_NEWOMF_ASCIZ PROC 103 | ; 104 | ; 105 | ; 106 | PUSHM EDI,ESI 107 | 108 | LEA ESI,[ECX+1] 109 | MOV CL,[ECX] ;SYMBOL LENGTH 110 | 111 | MOV EDI,EAX 112 | AND ECX,0FFH 113 | 114 | CMP CL,-1 ;-1 MIGHT BE SPECIAL 115 | JNZ L3$ 116 | 117 | MOV AL,[ESI] 118 | 119 | TEST AL,AL 120 | JNZ L3$ 121 | 122 | MOV CX,[ESI+1] 123 | ADD ESI,3 124 | L3$: 125 | OPTI_MOVSB 126 | 127 | MOV [EDI],CL 128 | 129 | POPM ESI,EDI 130 | 131 | RET 132 | 133 | MOVE_NEWOMF_ASCIZ ENDP 134 | 135 | 136 | END 137 | 138 | -------------------------------------------------------------------------------- /cv/xdebug.asm: -------------------------------------------------------------------------------- 1 | TITLE XDEBUG - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC FLUSH_CV_TEMP 6 | 7 | .CODE PASS2_TEXT 8 | 9 | externdef _flush_cv_temp:proc 10 | 11 | 12 | FLUSH_CV_TEMP PROC 13 | push ECX ; save 14 | push EDI 15 | call _flush_cv_temp 16 | add ESP,4 17 | mov EDI,EAX 18 | pop ECX 19 | ret 20 | FLUSH_CV_TEMP ENDP 21 | 22 | 23 | END 24 | 25 | -------------------------------------------------------------------------------- /cv/xdebugc.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | extern unsigned BYTES_SO_FAR; 5 | extern unsigned CV_HEADER_LOC; 6 | extern unsigned char CV_TEMP_RECORD; 7 | extern unsigned char ZEROS_16; 8 | 9 | void *_flush_cv_temp(unsigned char *EDI) 10 | { 11 | if (EDI != &CV_TEMP_RECORD) 12 | { _xdebug_write(EDI); 13 | EDI = &CV_TEMP_RECORD; 14 | } 15 | return EDI; 16 | } 17 | 18 | void _cv_dword_align_rtn() 19 | { 20 | unsigned ECX = -BYTES_SO_FAR & 3; 21 | if (ECX) 22 | _xdebug_normal(&ZEROS_16, ECX); 23 | } 24 | 25 | void _big_xdebug_write(unsigned EAX, void* *ECX) 26 | { 27 | // ECX IS BLOCK TABLE 28 | // EAX IS BYTE COUNT 29 | 30 | if (EAX) 31 | { 32 | void* *EBX = ECX; 33 | unsigned count = EAX; 34 | L1: 35 | void *p = *EBX; 36 | *EBX = 0; 37 | 38 | unsigned n = PAGE_SIZE; 39 | if (count <= n) 40 | n = count; 41 | _xdebug_normal(p, n); 42 | 43 | count -= n; 44 | ++EBX; 45 | _release_block(p); 46 | if (count) 47 | goto L1; 48 | return; 49 | } 50 | void *a = (void *)EAX; 51 | void **c = ECX; 52 | __asm 53 | { 54 | mov EAX,a 55 | mov ECX,c 56 | xchg [ECX],EAX 57 | mov a,EAX 58 | } 59 | if (a) 60 | _release_block(a); 61 | } 62 | 63 | void _xdebug_write(unsigned char *EDI) 64 | { 65 | // MOVE DATA FROM TEMP_RECORD TO FINAL 66 | _xdebug_normal(&CV_TEMP_RECORD, EDI - &CV_TEMP_RECORD); 67 | } 68 | 69 | void _xdebug_normal(void *EAX, unsigned ECX) 70 | { 71 | unsigned EDX = BYTES_SO_FAR; 72 | BYTES_SO_FAR += ECX; 73 | EDX += CV_HEADER_LOC; 74 | _move_eax_to_edx_final(EAX, ECX, EDX); 75 | } 76 | -------------------------------------------------------------------------------- /dllstuff/dllstuff.mak: -------------------------------------------------------------------------------- 1 | !INCLUDE ..\COMMON\MAKEMACS 2 | 3 | 4 | FLAGS = $(MASMFLAGS) 5 | SRC = $(BASE)\DLLSTUFF 6 | 7 | 8 | ALL : $(LIB)\DLLSTUFF.LIB 9 | 10 | 11 | $(LIB)\DLLSTUFF.LIB : $(OBJ)\LIBENTRY.OBJ $(OBJ)\DLLENTRY.OBJ 12 | $(BUILD_LIB) 13 | 14 | $(OBJ)\LIBENTRY.OBJ : LIBENTRY.ASM ..\COMMON\MACROS 15 | ML $(FLAGS) $(SRC)\LIBENTRY.ASM 16 | 17 | $(OBJ)\DLLENTRY.OBJ : DLLENTRY.ASM ..\COMMON\MACROS ..\COMMON\SYMCMACS ..\COMMON\RELEASE ..\COMMON\WIN32DEF ..\COMMON\WINMACS ..\COMMON\IO_STRUC 18 | ML $(FLAGS) $(SRC)\DLLENTRY.ASM 19 | 20 | 21 | -------------------------------------------------------------------------------- /dllstuff/go.bat: -------------------------------------------------------------------------------- 1 | NMAKE DLLSTUFF.MAK %1= 2 | -------------------------------------------------------------------------------- /dllstuff/libentry.asm: -------------------------------------------------------------------------------- 1 | TITLE LIBENTRY - Copyright (c) 1994 SLR Systems 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC LIBENTRY 6 | 7 | 8 | .DATA 9 | 10 | SOFT EXTD HINSTANCE 11 | 12 | 13 | .CODE ROOT_TEXT 14 | 15 | LIBENTRY PROC 16 | ; 17 | ;CALLED FROM WINDOWS WHEN DLL IS ATTACHED BY A PROCESS, AND 18 | ;WHEN DETACHED BY A PROCESS 19 | ; 20 | ;RETURN EAX!=0 FOR SUCCESS 21 | ; 22 | MOV ECX,[ESP+4] ;HINSTANCE 23 | ; MOV EDX,[ESP+8] ;REASON 24 | OR AL,1 ;I DON'T CARE 25 | MOV HINSTANCE,ECX 26 | 27 | RET 0CH 28 | 29 | LIBENTRY ENDP 30 | 31 | 32 | END LIBENTRY 33 | 34 | -------------------------------------------------------------------------------- /dllstuff/link: -------------------------------------------------------------------------------- 1 | OBJ\LIBENTRY.OBJ LIBENTRY.ASM ..\COMMON\MACROS ..\COMMON\WINMACS 2 | LIBENTRY/ZI,OBJ\; 3 | 4 | OBJ\DLLENTRY.OBJ DLLENTRY.ASM ..\COMMON\MACROS ..\COMMON\WINMACS ..\COMMON\RELEASE ..\COMMON\SYMCMACS 5 | DLLENTRY/ZI,OBJ\; 6 | 7 | 8 | -------------------------------------------------------------------------------- /dorel.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | md 750.%1 3 | xcopy /s 750.005 750.%1 4 | cd 750.%1 5 | del *.zip 6 | copy ..\os2link\objdll\LINKND.DLL rel\bin 7 | copy ..\os2link\objnt\LINK.exe rel\bin 8 | copy ..\os2link\relnotes.txt other 9 | zip -j -r B7506 rel\bin\link.exe rel\bin\linknd.dll other\relnotes.txt 10 | cd.. 11 | -------------------------------------------------------------------------------- /exe/aistuff.asm: -------------------------------------------------------------------------------- 1 | if fg_ai 2 | 3 | AIEXP_OUT_INIT PROC 4 | ; 5 | ;OPEN EXE OR COM FILE FOR OUTPUT 6 | ; 7 | CALL COMMON_OUT_INIT 8 | 9 | CALL OPEN_OUTPUT 10 | MOV _EXE_DEVICE,BX 11 | XOR DX,DX 12 | MOV EXEHDR_ADDR.LW,DX ;NEXT EXEHDR WRITE ADDRESS 13 | MOV EXEHDR_ADDR.HW,DX 14 | 15 | MOV AX,AI_SELECTOR_COUNT ;# OF AI SELECTORS 16 | MOV AIEXPHEADER._AIEXP_SEGTBL_COUNT,AX 17 | SHLI AX,3 ;#8 18 | ADD AX,SIZE AIEXP 19 | MOV AIEXPHEADER._AIEXP_IMAGE_BASE,AX 20 | RET 21 | 22 | AIEXP_OUT_INIT ENDP 23 | 24 | endif 25 | 26 | if fg_ai 27 | PUBLIC AI_OUT_TABLE 28 | 29 | AI_OUT_TABLE LABEL WORD 30 | 31 | DW AIEXP_OUT_INIT 32 | DW PROT_OUT_NEW_SEGMENT 33 | DW EXE_OUT_NEW_SEGMOD 34 | DW EXE_OUT_LDATA 35 | DW AIEXP_OUT_RELOC_BASE 36 | DW EXE_OUT_SEGMOD_FINISH 37 | DW EXE_OUT_DATA_BLOCK 38 | DW EXE_OUT_SEGMENT_FINISH 39 | DW EXE_OUT_END_OF_SEGMENTS 40 | DW PROT_FLUSH_SEGMENT 41 | DW EXE_OUT_FLUSH_EXE 42 | 43 | endif 44 | 45 | 46 | -------------------------------------------------------------------------------- /exe/calcexe.asm: -------------------------------------------------------------------------------- 1 | TITLE CALCEXE - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE EXES 5 | 6 | 7 | PUBLIC CALC_EXE_LEN,DO_EXEHEADER 8 | 9 | 10 | .DATA 11 | 12 | EXTERNDEF NEW_REPT_ADDR:DWORD,FINAL_HIGH_WATER:DWORD,EXE_OUT_POSITION:DWORD,HIGH_PC:DWORD,DOSX_HDR_SIZE:DWORD 13 | 14 | EXTERNDEF EXEHEADER:EXE 15 | 16 | 17 | .CODE PASS2_TEXT 18 | 19 | 20 | CALC_EXE_LEN PROC 21 | 22 | if fg_slrpack 23 | BITT SLRPACK_FLAG 24 | JZ L23$ 25 | 26 | MOV EAX,NEW_REPT_ADDR 27 | RET 28 | 29 | L23$: 30 | endif 31 | MOV EAX,FINAL_HIGH_WATER 32 | MOV ECX,EXE_OUT_POSITION 33 | 34 | SUB EAX,ECX 35 | 36 | RET 37 | 38 | CALC_EXE_LEN ENDP 39 | 40 | 41 | DO_EXEHEADER PROC 42 | ; 43 | ;DO EXEHEADER 44 | ; 45 | PUSHM ESI,EBX 46 | 47 | MOV ECX,FINAL_HIGH_WATER 48 | MOV EDX,DOSX_HDR_SIZE 49 | 50 | MOV ESI,OFF EXEHEADER 51 | ASSUME ESI:PTR EXE 52 | SUB ECX,EDX 53 | 54 | MOV EDX,ECX 55 | AND ECX,511 56 | 57 | MOV [ESI]._EXE_LEN_MOD_512,CX 58 | ADD EDX,511 59 | 60 | SHR EDX,9 61 | 62 | MOV [ESI]._EXE_LEN_PAGE_512,DX 63 | ; 64 | ;MIN ABOVE... 65 | ; 66 | MOV ECX,EXE_OUT_POSITION 67 | MOV EBX,FINAL_HIGH_WATER 68 | 69 | MOV EAX,HIGH_PC 70 | SUB EBX,ECX 71 | 72 | ADD EAX,15 73 | ADD EBX,15 74 | 75 | AND BL,0F0H 76 | 77 | SUB EAX,EBX 78 | JNC L5$ 79 | 80 | XOR EAX,EAX 81 | L5$: 82 | SHR EAX,4 83 | MOV EDX,DOSX_HDR_SIZE 84 | 85 | MOV [ESI]._EXE_MIN_ABOVE,AX 86 | XOR ECX,ECX 87 | 88 | CMP [ESI]._EXE_MAX_ABOVE,AX 89 | JNC L7$ 90 | 91 | MOV [ESI]._EXE_MAX_ABOVE,AX 92 | L7$: 93 | TEST EDX,EDX 94 | JZ L9$ 95 | MOV [ESI]._EXE_REG_SS,CX 96 | MOV [ESI]._EXE_REG_SP,CX 97 | L9$: 98 | MOV EAX,ESI 99 | 100 | POPM EBX,ESI 101 | 102 | RET 103 | 104 | DO_EXEHEADER ENDP 105 | 106 | 107 | END 108 | 109 | -------------------------------------------------------------------------------- /exe/compmsg.asm: -------------------------------------------------------------------------------- 1 | TITLE COMPMSG 2 | 3 | INCLUDE MACROS 4 | 5 | if fg_slrpack 6 | 7 | PUBLIC COMPRESSING_MESSAGE 8 | 9 | .CODE PASS2_TEXT 10 | 11 | SOFT EXTP AX_MESOUT 12 | 13 | COMPRESSING_MESSAGE PROC 14 | ; 15 | ; 16 | ; 17 | MOV AX,SEG COMPRESSING_MSG 18 | MOV SI,OFF COMPRESSING_MSG 19 | CALL AX_MESOUT 20 | RET 21 | 22 | COMPRESSING_MESSAGE ENDP 23 | 24 | COMPRESSING_MSG DB LENGTH COMPRESSING_MSG-1,'Compressing' 25 | 26 | endif 27 | 28 | END 29 | 30 | -------------------------------------------------------------------------------- /exe/eosegs.asm: -------------------------------------------------------------------------------- 1 | TITLE EOSEGS - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | 6 | PUBLIC EXE_OUT_END_OF_SEGMENTS 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF OPTI_STOSD_SIZE:DWORD 12 | 13 | EXTERNDEF OUT_FLUSH_EXE:DWORD 14 | 15 | 16 | .CODE PASS2_TEXT 17 | 18 | 19 | EXE_OUT_END_OF_SEGMENTS PROC 20 | ; 21 | ; 22 | ; 23 | ;if fg_cv 24 | ; BITT DOING_DEBUG 25 | ; JNZ 1$ 26 | ;endif 27 | CALL OUT_FLUSH_EXE 28 | 29 | MOV OPTI_STOSD_SIZE,1 30 | ;1$: 31 | RET 32 | 33 | EXE_OUT_END_OF_SEGMENTS ENDP 34 | 35 | 36 | END 37 | 38 | -------------------------------------------------------------------------------- /exe/exeinit.asm: -------------------------------------------------------------------------------- 1 | TITLE EXEINIT - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC DO_EXE_INIT,SET_EXEPACK_STUFF 6 | 7 | 8 | .DATA 9 | 10 | EXTERNDEF EXE_OUT_POSITION:DWORD,FINAL_HIGH_WATER:DWORD,NEW_REPT_ADDR:DWORD,TARG_ADDR:DWORD 11 | EXTERNDEF DOSX_HDR_SIZE:DWORD 12 | 13 | EXTERNDEF EXEPACK_ROUTINE:DWORD 14 | 15 | 16 | .CODE PASS2_TEXT 17 | 18 | EXTERNDEF REXE_INIT:PROC 19 | 20 | 21 | DO_EXE_INIT PROC 22 | ; 23 | ; 24 | ; 25 | ADD EAX,DOSX_HDR_SIZE 26 | 27 | MOV EXE_OUT_POSITION,EAX 28 | MOV FINAL_HIGH_WATER,EAX 29 | 30 | SUB EAX,2 31 | if fg_slrpack 32 | BITT SLRPACK_FLAG 33 | JZ L53$ 34 | 35 | MOV EAX,-2 36 | 37 | endif 38 | 39 | L53$: 40 | 41 | DO_EXE_INIT ENDP 42 | 43 | 44 | SET_EXEPACK_STUFF PROC 45 | ; 46 | ; 47 | ; 48 | MOV NEW_REPT_ADDR,EAX 49 | ADD EAX,2 50 | 51 | MOV TARG_ADDR,EAX 52 | 53 | MOV EXEPACK_ROUTINE,OFF REXE_INIT 54 | 55 | RESS EXEPACK_FLUSHING 56 | 57 | RET 58 | 59 | SET_EXEPACK_STUFF ENDP 60 | 61 | 62 | END 63 | 64 | -------------------------------------------------------------------------------- /exe/exestr.asm: -------------------------------------------------------------------------------- 1 | TITLE EXESTR - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | 6 | PUBLIC FLUSH_EXESTR 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF EXESTR_STRUCTURE:SEQ_STRUCT 12 | 13 | 14 | .CODE PASS2_TEXT 15 | 16 | EXTERNDEF MOVE_EAX_TO_FINAL_HIGH_WATER:PROC,RELEASE_SEGMENT:PROC 17 | 18 | 19 | FLUSH_EXESTR PROC 20 | ; 21 | ;IF ANY EXESTR DATA, FLUSH IT PLEASE 22 | ; 23 | MOV EDX,OFF EXESTR_STRUCTURE._SEQ_TABLE 24 | 25 | CMP DPTR [EDX],0 ;ANY DATA? 26 | JZ L9$ 27 | 28 | MOV ECX,[EDX].SEQ_STRUCT._SEQ_PTR-SEQ_STRUCT._SEQ_TABLE 29 | ; 30 | ;ECX IS NUMBER OF BYTES TO WRITE 31 | ; 32 | L1$: 33 | MOV EAX,[EDX] 34 | ADD EDX,4 35 | 36 | ; 37 | ;IF ECX > PAGE_SIZE, WRITE PAGE_SIZE 38 | ; 39 | PUSHM EDX,ECX 40 | 41 | CMP ECX,PAGE_SIZE 42 | JB L2$ 43 | L15$: 44 | MOV ECX,PAGE_SIZE 45 | L2$: 46 | PUSHM ECX,EAX 47 | CALL MOVE_EAX_TO_FINAL_HIGH_WATER 48 | 49 | POP EAX 50 | CALL RELEASE_SEGMENT 51 | 52 | POPM EAX,ECX,EDX 53 | SUB ECX,EAX 54 | JNZ L1$ 55 | L9$: 56 | RET 57 | 58 | FLUSH_EXESTR ENDP 59 | 60 | 61 | END 62 | 63 | -------------------------------------------------------------------------------- /exe/fllinnum.asm: -------------------------------------------------------------------------------- 1 | TITLE FLLINNUM - Copyright (c) SLR Systems 1991 2 | 3 | INCLUDE MACROS 4 | INCLUDE MODULES 5 | 6 | PUBLIC FLUSH_ERROR_LINENUMBERS 7 | 8 | .DATA 9 | 10 | .CODE PASS2_TEXT 11 | 12 | SOFT EXTP RELEASE_BLOCK 13 | 14 | ASSUME DS:NOTHING 15 | 16 | FLUSH_ERROR_LINENUMBERS PROC 17 | ; 18 | ;DECREMENT COUNTS ON LINENUMBER RECORDS IF ERROR_LINENUMBERS 19 | ; 20 | BITT ERRORS_LINENUMBERS 21 | JZ 9$ 22 | RESS ERRORS_LINENUMBERS 23 | XOR BX,BX 24 | ; 25 | ;FOR MODULE=FIRST THRU LAST 26 | ; 27 | LDS SI,FIRST_MODULE 28 | JMP #TEST_MODULE 29 | 30 | 2$: 31 | CONV_DS 32 | PUSHM [SI]._LN_NEXT_LINNUM.OFFS,[SI]._LN_NEXT_LINNUM.SEGM 33 | MOV CX,[SI]._LN_SECOND_BLK 34 | 25$: 35 | DEC WPTR [BX] 36 | JZ 5$ 37 | 3$: 38 | JCXZ 4$ 39 | MOV DX,CX 40 | XOR CX,CX 41 | MOV DS,DX 42 | CONV_DS 43 | JMP 25$ 44 | 45 | 4$: 46 | POPM DS,SI 47 | #TEST_LINE: 48 | MOV DX,DS 49 | OR DX,DX 50 | JNZ 2$ 51 | #NEXT_MODULE: 52 | POPM DS,SI 53 | #TEST_MODULE: 54 | MOV CX,DS 55 | JCXZ 9$ 56 | 1$: 57 | ; 58 | ;FOR LINE=FIRST_LINE THRU LAST LINE 59 | ; 60 | SYM_CONV_DS 61 | PUSHM [SI]._M_NEXT_MOD.OFFS,[SI]._M_NEXT_MOD.SEGM 62 | ; LDS SI,[SI]._M_FIRST_LIN 63 | JMP #TEST_LINE 64 | 65 | 9$: 66 | FIXDS 67 | RET 68 | 69 | 5$: 70 | XCHG AX,DX 71 | CALL RELEASE_BLOCK 72 | JMP 3$ 73 | 74 | FLUSH_ERROR_LINENUMBERS ENDP 75 | 76 | END 77 | 78 | -------------------------------------------------------------------------------- /exe/go.bat: -------------------------------------------------------------------------------- 1 | NMAKE EXE.MAK %1= 2 | 3 | 4 | -------------------------------------------------------------------------------- /exe/initrang.asm: -------------------------------------------------------------------------------- 1 | TITLE INITRANG - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC INIT_FINAL_RANGES 6 | 7 | 8 | .DATA 9 | 10 | EXTERNDEF MAX_FINAL_TABLE:DWORD,MAX_FINAL_RANGES:DWORD,FINAL_TABLE:DWORD,FINAL_RANGES:DWORD 11 | 12 | 13 | .CODE PASS2_TEXT 14 | 15 | 16 | INIT_FINAL_RANGES PROC 17 | ; 18 | ;SET UP FINAL_TABLE AND FINAL_RANGES 19 | ; 20 | 21 | MOV ECX,OFF FINAL_TABLE+8 22 | MOV EDX,OFF FINAL_RANGES+8 23 | 24 | XOR EAX,EAX 25 | MOV MAX_FINAL_TABLE,ECX 26 | 27 | MOV [ECX-8],EAX 28 | DEC EAX 29 | 30 | MOV [ECX-4],EAX 31 | MOV [EDX-8],EAX 32 | 33 | MOV [EDX-4],EAX 34 | MOV MAX_FINAL_RANGES,EDX 35 | 36 | RET 37 | 38 | INIT_FINAL_RANGES ENDP 39 | 40 | 41 | END 42 | 43 | -------------------------------------------------------------------------------- /exe/pack0.asm: -------------------------------------------------------------------------------- 1 | TITLE PACK0 - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | if fg_prot 6 | 7 | PUBLIC PACK_ZERO 8 | 9 | 10 | .DATA 11 | 12 | EXTERNDEF EXETABLE:DWORD 13 | 14 | 15 | .CODE PASS2_TEXT 16 | 17 | EXTERNDEF CONVERT_SUBBX_TO_EAX:PROC,RELEASE_BLOCK:PROC 18 | 19 | 20 | PACK_ZERO PROC 21 | ; 22 | ;SCAN BACKWARDS LOOKING FOR FIRST NON-ZERO DATA 23 | ; 24 | PUSH EDI 25 | ADD EDX,3 26 | 27 | PUSH EBX 28 | AND EDX,0FFFFFFFCH ;FIRST DWORD TO CHECK 29 | 30 | MOV EDI,EDX 31 | 32 | SHR EDX,PAGE_BITS 33 | AND EDI,PAGE_SIZE-1 34 | 35 | LEA EBX,EXETABLE[EDX*4] 36 | ; 37 | ;FIRST CHECK PARTIAL LAST BLOCK 38 | ; 39 | JZ L5$ ;OOPS, NO PARTIAL BLOCK 40 | 41 | CALL CONVERT_SUBBX_TO_EAX 42 | 43 | MOV ECX,EDI 44 | LEA EDI,[EDI+EAX-4] 45 | 46 | SHR ECX,2 47 | XOR EAX,EAX 48 | 49 | STD 50 | 51 | REPE SCASD 52 | 53 | CLD 54 | 55 | JNZ L7$ ;NON-ZERO DATA, HELP ME 56 | L2$: 57 | ; 58 | ;TRY ANOTHER COMPLETE BLOCK 59 | ; 60 | XOR ECX,ECX 61 | MOV EAX,[EBX] 62 | 63 | MOV [EBX],ECX 64 | CALL RELEASE_BLOCK 65 | L5$: 66 | DEC EDX 67 | JS L6$ ;OOPS, DONE! 68 | 69 | MOV EAX,[EBX-4] 70 | SUB EBX,4 71 | 72 | TEST EAX,EAX 73 | JZ L5$ 74 | 75 | LEA EDI,[EAX+PAGE_SIZE-4] 76 | MOV ECX,PAGE_SIZE/4 77 | 78 | XOR EAX,EAX 79 | 80 | STD 81 | 82 | REPE SCASD 83 | 84 | CLD 85 | 86 | JZ L2$ 87 | 88 | JMP L7$ 89 | 90 | L6$: 91 | XOR EDX,EDX 92 | JMP L9$ 93 | 94 | L7$: 95 | ; 96 | ;NON-ZERO STUFF HERE (NORMAL...) 97 | ; 98 | MOV AL,[EDI+7] 99 | LEA EDI,[EDI+6] 100 | 101 | OR AL,AL 102 | JNZ L71$ 103 | 104 | MOV AL,[EDI] 105 | DEC EDI 106 | 107 | OR AL,AL 108 | JNZ L71$ 109 | 110 | MOV AL,[EDI] 111 | DEC EDI 112 | 113 | OR AL,AL 114 | JNZ L71$ 115 | 116 | DEC EDI 117 | L71$: 118 | ADD EDI,2 119 | MOV EAX,[EBX] 120 | 121 | SUB EDI,EAX ;OFFSET FROM BLOCK 122 | ; 123 | ; 124 | ; 125 | CMP EDI,PAGE_SIZE 126 | JNZ L74$ 127 | 128 | XOR EDI,EDI 129 | INC EDX 130 | L74$: 131 | SHL EDX,PAGE_BITS 132 | 133 | OR EDX,EDI 134 | L9$: 135 | POPM EBX,EDI 136 | 137 | RET 138 | 139 | PACK_ZERO ENDP 140 | 141 | endif 142 | 143 | END 144 | 145 | -------------------------------------------------------------------------------- /exe/pe_chang.asm: -------------------------------------------------------------------------------- 1 | TITLE PE_CHANG - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | if fg_pe 5 | INCLUDE PE_STRUC 6 | 7 | PUBLIC CHANGE_PE_OBJECT 8 | 9 | 10 | .DATA 11 | 12 | EXTERNDEF CURN_PE_OBJECT_NUMBER:DWORD,CURN_PE_OBJECT_GINDEX:DWORD,PE_DEBUG_OBJECT_NUMBER:DWORD 13 | EXTERNDEF FINAL_HIGH_WATER:DWORD,OLD_HIGH_WATER:DWORD,PE_BASE:DWORD,FIRST_PEOBJECT_GINDEX:DWORD 14 | 15 | EXTERNDEF PE_OBJECT_GARRAY:STD_PTR_S 16 | 17 | 18 | .CODE PASS2_TEXT 19 | 20 | EXTERNDEF DO_OS2_ALIGN:PROC 21 | 22 | 23 | CHANGE_PE_OBJECT PROC 24 | ; 25 | ;FIRST, CLOSE OUT CURRENT OBJECT 26 | ; 27 | MOV EAX,CURN_PE_OBJECT_NUMBER 28 | MOV ECX,PE_DEBUG_OBJECT_NUMBER 29 | 30 | TEST EAX,EAX 31 | JZ L2$ 32 | 33 | CMP ECX,EAX 34 | JZ L3$ 35 | L2$: 36 | CALL DO_OS2_ALIGN ;ALIGN TO ALIGNMENT FILE BOUNDARY 37 | 38 | MOV EAX,CURN_PE_OBJECT_GINDEX 39 | 40 | TEST EAX,EAX 41 | JZ L7$ 42 | L6$: 43 | CONVERT EAX,EAX,PE_OBJECT_GARRAY 44 | ASSUME EAX:PTR PE_IOBJECT_STRUCT 45 | 46 | MOV EDX,FINAL_HIGH_WATER 47 | MOV ECX,[EAX]._PEOBJECT_POFFSET 48 | 49 | SUB EDX,ECX 50 | 51 | MOV [EAX]._PEOBJECT_PSIZE,EDX 52 | L4$: 53 | MOV EAX,[EAX]._PEOBJECT_NEXT_GINDEX 54 | L5$: 55 | MOV CURN_PE_OBJECT_GINDEX,EAX 56 | MOV EDX,FINAL_HIGH_WATER 57 | 58 | TEST EAX,EAX 59 | JZ L9$ 60 | 61 | CONVERT EAX,EAX,PE_OBJECT_GARRAY 62 | ASSUME EAX:PTR PE_IOBJECT_STRUCT 63 | 64 | MOV [EAX]._PEOBJECT_POFFSET,EDX 65 | MOV EDX,[EAX]._PEOBJECT_RVA 66 | 67 | ADD EDX,PE_BASE 68 | MOV ECX,[EAX]._PEOBJECT_NUMBER 69 | 70 | MOV OLD_HIGH_WATER,EDX 71 | MOV CURN_PE_OBJECT_NUMBER,ECX 72 | L9$: 73 | RET 74 | 75 | L7$: 76 | MOV EAX,FIRST_PEOBJECT_GINDEX 77 | JMP L5$ 78 | 79 | L3$: 80 | MOV EAX,CURN_PE_OBJECT_GINDEX 81 | 82 | CONVERT EAX,EAX,PE_OBJECT_GARRAY 83 | ASSUME EAX:PTR PE_IOBJECT_STRUCT 84 | 85 | JMP L4$ 86 | 87 | CHANGE_PE_OBJECT ENDP 88 | 89 | endif 90 | 91 | END 92 | 93 | -------------------------------------------------------------------------------- /exe/ratstuff.asm: -------------------------------------------------------------------------------- 1 | if fg_rat 2 | 3 | RAT_OUT_INIT PROC 4 | ; 5 | ;OPEN EXE OR COM FILE FOR OUTPUT 6 | ; 7 | CALL COMMON_OUT_INIT 8 | 9 | CALL OPEN_OUTPUT 10 | MOV _EXE_DEVICE,BX 11 | XOR DX,DX 12 | MOV EXEHDR_ADDR.LW,DX ;NEXT EXEHDR WRITE ADDRESS 13 | MOV EXEHDR_ADDR.HW,DX 14 | 15 | RET 16 | 17 | RAT_OUT_INIT ENDP 18 | 19 | endif 20 | 21 | if fg_rat 22 | 23 | PUBLIC RAT_OUT_TABLE 24 | 25 | RAT_OUT_TABLE LABEL WORD 26 | 27 | DW RAT_OUT_INIT 28 | DW PROT_OUT_NEW_SEGMENT 29 | DW PROT_OUT_NEW_SEGMOD 30 | DW EXE_OUT_SEGMOD_FINISH 31 | DW EXE_OUT_SEGMENT_FINISH 32 | DW EXE_OUT_END_OF_SEGMENTS 33 | DW PROT_FLUSH_SEGMOD 34 | DW PROT_FLUSH_SEGMENT 35 | DW RAT_OUT_FLUSH_EXE 36 | 37 | endif 38 | 39 | 40 | -------------------------------------------------------------------------------- /exe/shldxdi.asm: -------------------------------------------------------------------------------- 1 | TITLE SHLDXDI - Copyright (c) SLR Systems 1991 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC SHL_DXDI_PAGESHIFT_DI 6 | 7 | .CODE ROOT_TEXT 8 | 9 | ASSUME DS:NOTHING 10 | 11 | SHL_DXDI_PAGESHIFT_DI PROC 12 | ; 13 | ; 14 | ; 15 | REPT PAGE_SHIFT 16 | ADD DI,DI 17 | ADC DX,DX 18 | ENDM 19 | SHRI DI,PAGE_SHIFT 20 | RET 21 | 22 | SHL_DXDI_PAGESHIFT_DI ENDP 23 | 24 | END 25 | 26 | -------------------------------------------------------------------------------- /getlog.bat: -------------------------------------------------------------------------------- 1 | obj2asm objnt\%1.obj >%1.log 2 | -------------------------------------------------------------------------------- /gr.bat: -------------------------------------------------------------------------------- 1 | grep -r -i %1 *.h *.c *.asm 2 | -------------------------------------------------------------------------------- /install.bat: -------------------------------------------------------------------------------- 1 | imagecfg -a 0x1 \cbx\optlinkc\os2link\objnt\link.exe 2 | copy \cbx\optlinkc\os2link\objnt\link.exe \dm\bin 3 | -------------------------------------------------------------------------------- /install/finsegatc.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "all.h" 5 | 6 | SEGMENT_STRUCT *_find_segat_location() 7 | { 8 | // SCAN LIST OF ABSOLUTE SEGMENTS FOR PLACE TO PUT THIS ONE 9 | // (IN NUMERICAL ORDER FOR ROM-LINK) 10 | // RETURN EAX POINTING TO PLACE TO RECEIVE NEW SEGMENT 11 | 12 | SEGMENT_STRUCT *EAX = (SEGMENT_STRUCT *)((char *)&FIRST_FINAL_SEGMENT_GINDEX - offsetof(SEGMENT_STRUCT, _SEG_NEXT_SEG_GINDEX)); 13 | unsigned ECX = SEG_FRAME; 14 | L2: 15 | SEGMENT_STRUCT *EDX = EAX; 16 | EAX = EAX->_SEG_NEXT_SEG_GINDEX; 17 | if (!EAX) 18 | goto L9; 19 | if (ECX >= EAX->_SEG_OFFSET) 20 | goto L2; 21 | L9: 22 | return EDX; 23 | } 24 | 25 | -------------------------------------------------------------------------------- /install/go.bat: -------------------------------------------------------------------------------- 1 | NMAKE INSTALL.MAK %1= 2 | 3 | -------------------------------------------------------------------------------- /install/instcomm.asm: -------------------------------------------------------------------------------- 1 | TITLE INST_INIT - Copyright (C) 1994 SLR Systems 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC COMMON_INST_INIT 6 | 7 | 8 | .CODE ROOT_TEXT 9 | 10 | externdef _common_inst_init:proc 11 | 12 | 13 | COMMON_INST_INIT PROC 14 | push ECX 15 | push EAX 16 | call _common_inst_init 17 | add ESP,4 18 | pop ECX 19 | ret 20 | COMMON_INST_INIT ENDP 21 | 22 | END 23 | 24 | -------------------------------------------------------------------------------- /install/instcommc.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | 5 | void _common_inst_init(ALLOCS_STRUCT *EBX) 6 | { 7 | // EBX POINTS TO _STUFF ALLOCS STRUCTURE THAT IS TO BE INITIALIZED WITH A HASH TABLE 8 | 9 | void *EDI = _get_new_log_blk(); 10 | EBX->ALLO_HASH_TABLE_PTR = EDI; 11 | EBX->ALLO_BLK_LIST[0] = EDI; // first block 12 | EBX->ALLO_HASH = PRIME_2K; 13 | EBX->ALLO_PTR = (char *)EDI + 2 * 1024 * 4; 14 | EBX->ALLO_CNT = PAGE_SIZE - 2 * 1024 * 4; 15 | EBX->ALLO_NEXT_BLK = &EBX->ALLO_BLK_LIST[1]; 16 | EBX->ALLO_BLK_CNT = 1; 17 | memset(EDI, 0, 2 * 1024 * 4); 18 | } 19 | -------------------------------------------------------------------------------- /install/instsoft.asm: -------------------------------------------------------------------------------- 1 | TITLE INSTSOFT - Copyright (C) 1994 SLR Systems 2 | 3 | INCLUDE MACROS 4 | INCLUDE CDDATA 5 | 6 | PUBLIC INSTALL_SOFT_REF 7 | 8 | ; 9 | ; DS:SI (CX) IS SYMBOL TO BE ADDED TO LIST OF COMDAT SOFT REFERENCES 10 | ; 11 | 12 | .DATA 13 | 14 | EXTERNDEF MYCOMDAT_LINDEX:DWORD 15 | 16 | 17 | .CODE PASS1_TEXT 18 | 19 | EXTERNDEF ALLOC_LOCAL:PROC 20 | 21 | 22 | INSTALL_SOFT_REF PROC 23 | ; 24 | ;EAX IS SYMBOL_GINDEX TO ADD TO LIST OF SYMBOLS REFERENCED BY THIS COMDAT... 25 | ; 26 | PUSH EDI 27 | MOV EDI,EAX 28 | 29 | MOV EAX,MYCOMDAT_LINDEX ;LATEST COMDAT REFERENCED 30 | CONVERT_MYCOMDAT_EAX_ECX 31 | 32 | PUSH EBX 33 | MOV EBX,ECX 34 | 35 | MOV EDX,EDI 36 | LEA EDI,[ECX].MYCOMDAT_STRUCT._MCD_FIRST_SOFT_BLOCK 37 | 38 | XOR ECX,ECX 39 | L1$: 40 | MOV EAX,[EDI] 41 | 42 | TEST EAX,EAX ;NEXT BLOCK EXISTS? 43 | JZ L8$ ;NOPE, GO CREATE IT 44 | 45 | LEA EDI,[EAX+4] 46 | MOV ECX,[EAX] ;SCAN FOR MATCHING SYMBOL 47 | 48 | MOV EAX,EDX 49 | MOV EBX,ECX 50 | 51 | REPNE SCASD 52 | 53 | JZ L9$ ;JUMP IF MATCH 54 | 55 | CMP EBX,SOFT_PER_BLK 56 | JZ L1$ 57 | ; 58 | ;ROOM FOR ANOTHER, STORE IT 59 | ; 60 | LEA ECX,[EBX*4] 61 | INC EBX 62 | 63 | NEG ECX 64 | 65 | MOV [EDI],EAX 66 | 67 | MOV [EDI+ECX-4],EBX 68 | L9$: 69 | POPM EBX,EDI 70 | 71 | RET 72 | 73 | 74 | L8$: 75 | ; 76 | ;CREATE NEW BLOCK, ES:DI GETS POINTER, DX 77 | ; 78 | MOV EAX,SOFT_PER_BLK*4+8 79 | CALL ALLOC_LOCAL 80 | 81 | MOV [EDI],EAX 82 | LEA EDI,[EAX+8] 83 | 84 | MOV DPTR [EAX],1 85 | MOV DPTR [EAX+4],EDX 86 | 87 | XOR EAX,EAX 88 | MOV ECX,(SOFT_PER_BLK*4+8-8)/4 89 | 90 | REP STOSD 91 | 92 | POPM EBX,EDI 93 | 94 | RET 95 | 96 | INSTALL_SOFT_REF ENDP 97 | 98 | 99 | END 100 | 101 | -------------------------------------------------------------------------------- /install/modinst.asm: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /install/nameinst.asm: -------------------------------------------------------------------------------- 1 | TITLE NAME_INSTALL - Copyright (C) 1994 SLR Systems 2 | 3 | INCLUDE MACROS 4 | ; INCLUDE CDDATA 5 | 6 | PUBLIC LNAME_INSTALL 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF SYMBOL_TEXT:BYTE 12 | 13 | EXTERNDEF SYMBOL_LENGTH:DWORD,SYM_HASH_MOD:DWORD 14 | 15 | EXTERNDEF LNAME_STUFF:ALLOCS_STRUCT 16 | 17 | 18 | .CODE PASS1_TEXT 19 | 20 | EXTERNDEF ALLOC_LOCAL:PROC 21 | 22 | 23 | LNAME_INSTALL PROC 24 | ; 25 | ;EAX IS TPTR_STRUCT, ECX IS HASH_MOD, EDX IS HASH 26 | ; 27 | ;RETURN EAX IS LOGICAL ADDRESS 28 | ; 29 | PUSH ESI 30 | LEA ESI,[EAX]._TP_TEXT 31 | 32 | MOV EAX,[EAX]._TP_LENGTH 33 | PUSH EDI 34 | 35 | ADD EAX,SIZE TPTR_STRUCT+SIZE PRETEXT_PTR_STRUCT-3 ; 36 | CALL ALLOC_LOCAL ;EAX LOG 37 | ASSUME EAX:PTR TPTR_STRUCT 38 | 39 | XOR EDI,EDI 40 | MOV [EAX+4]._TP_FLAGS,ECX 41 | 42 | MOV DPTR [EAX],EDI ;PTR TO MYCOMDAT STRUCTURE 43 | MOV ECX,[ESI+(TPTR_STRUCT._TP_LENGTH - TPTR_STRUCT._TP_TEXT)] 44 | 45 | MOV [EAX+4]._TP_HASH,EDX 46 | MOV [EAX+4]._TP_LENGTH,ECX 47 | 48 | SHR ECX,2 49 | LEA EDI,[EAX+4]._TP_TEXT 50 | 51 | INC ECX 52 | LEA EAX,[EAX+4] 53 | 54 | OPTI_MOVSD 55 | 56 | POPM EDI,ESI 57 | 58 | RET 59 | 60 | LNAME_INSTALL ENDP 61 | 62 | 63 | END 64 | 65 | -------------------------------------------------------------------------------- /install/sentry.asm: -------------------------------------------------------------------------------- 1 | TITLE SEARCH_ENTRY - Copyright (C) 1994 SLR Systems 2 | 3 | INCLUDE MACROS 4 | INCLUDE SEGMSYMS 5 | 6 | if fg_segm 7 | 8 | PUBLIC SEARCH_ENTRY 9 | 10 | 11 | .DATA 12 | 13 | EXTERNDEF ENTRY_STUFF:ALLOCS_STRUCT 14 | 15 | EXTERNDEF ENTRY_GARRAY:STD_PTR_S 16 | 17 | 18 | .CODE PASS2_TEXT 19 | 20 | 21 | SEARCH_ENTRY PROC 22 | ; 23 | ;DL:AX IS ITEM TO FIND... SEGMENT:OFFSET 24 | ;AX BECOMES ORDINAL # ELSE CARRY FLAG 25 | ; 26 | MOV CL,DL 27 | XOR EDX,EDX 28 | 29 | PUSH EBX 30 | MOV EBX,ENTRY_STUFF.ALLO_HASH_TABLE_PTR 31 | 32 | MOV DL,CL 33 | MOV ECX,EAX 34 | 35 | HASHDIV ENTRY_STUFF.ALLO_HASH 36 | 37 | MOV EAX,DPTR [EBX+EDX*4] 38 | NAME_NEXT: 39 | TEST EAX,EAX 40 | JZ L9$ 41 | 42 | CONVERT EAX,EAX,ENTRY_GARRAY 43 | ASSUME EAX:PTR ENTRY_STRUCT,EBX:PTR ENTRY_STRUCT 44 | 45 | MOV EBX,EAX 46 | MOV EDX,[EBX]._ENTRY_OFFSET 47 | ; 48 | ;IS IT A MATCH? 49 | ; 50 | MOV EAX,[EBX]._ENTRY_NEXT_HASH_GINDEX 51 | CMP EDX,ECX 52 | 53 | JNZ NAME_NEXT 54 | 55 | MOV EAX,[EBX]._ENTRY_ORD 56 | POP EBX 57 | 58 | RET 59 | 60 | L9$: 61 | CMP ESP,-1 62 | POP EBX 63 | 64 | RET 65 | 66 | SEARCH_ENTRY ENDP 67 | 68 | endif 69 | 70 | END 71 | 72 | -------------------------------------------------------------------------------- /install/sentrynm.asm: -------------------------------------------------------------------------------- 1 | TITLE SEARCH_ENTRYNAME - Copyright (C) 1994 SLR Systems 2 | 3 | INCLUDE MACROS 4 | INCLUDE SEGMSYMS 5 | 6 | if fg_segm 7 | 8 | PUBLIC SEARCH_ENTRYNAME 9 | 10 | 11 | .DATA 12 | 13 | EXTERNDEF SYMBOL_TEXT:BYTE 14 | 15 | EXTERNDEF SYMBOL_LENGTH:DWORD 16 | 17 | EXTERNDEF ENTRYNAME_STUFF:ALLOCS_STRUCT,ENTRYNAME_GARRAY:STD_PTR_S 18 | 19 | 20 | .CODE PASS1_TEXT 21 | 22 | 23 | SEARCH_ENTRYNAME PROC ;USED BY INSTALL_ENTRYNAME, AND ALSO OLD-PROCESSING 24 | ; 25 | ;EDX IS TEXT HASH VALUE, RETURN EAX IS INDEX, ECX IS PHYSICAL 26 | ; 27 | MOV EAX,EDX 28 | XOR EDX,EDX 29 | 30 | HASHDIV ENTRYNAME_STUFF.ALLO_HASH ;EDX IS HASH VALUE 31 | 32 | PUSH EBX 33 | MOV EBX,ENTRYNAME_STUFF.ALLO_HASH_TABLE_PTR 34 | 35 | PUSHM EDI,ESI 36 | 37 | MOV EAX,[EBX+EDX*4] 38 | LEA EBX,[EBX+EDX*4-ENT_STRUCT._ENT_NEXT_HASH_GINDEX] 39 | TRY_NAME_NEXT: 40 | TEST EAX,EAX 41 | JZ L9$ 42 | 43 | MOV EBX,EAX 44 | MOV EDX,EAX 45 | 46 | CONVERT EBX,EBX,ENTRYNAME_GARRAY 47 | ASSUME EBX:PTR ENT_STRUCT 48 | ; 49 | ;PROBABLE MATCH, NEED COMPARE... 50 | ; 51 | MOV ECX,SYMBOL_LENGTH 52 | MOV EDI,OFF SYMBOL_TEXT 53 | ; 54 | ;ASSUME ENTRIES ARE PASCAL, CASE IGNORE 55 | ; 56 | SHR ECX,2 57 | LEA ESI,[EBX]._ENT_TEXT 58 | 59 | INC ECX 60 | MOV EAX,[EBX]._ENT_NEXT_HASH_GINDEX ;NEXT INDEX HASH ORDER 61 | 62 | REPE CMPSD 63 | 64 | JNZ TRY_NAME_NEXT 65 | 66 | POPM ESI,EDI 67 | 68 | MOV ECX,EBX 69 | POP EBX 70 | 71 | MOV EAX,EDX ;AX = INDEX, DS:BX IS PHYSICAL 72 | 73 | RET 74 | 75 | L9$: 76 | MOV ECX,EBX 77 | CMP ESP,-1 78 | 79 | POPM ESI,EDI,EBX 80 | 81 | RET 82 | 83 | SEARCH_ENTRYNAME ENDP 84 | 85 | endif 86 | 87 | END 88 | 89 | -------------------------------------------------------------------------------- /install/softpent.asm: -------------------------------------------------------------------------------- 1 | TITLE SOFTPENT - Copyright (C) 1994 SLR Systems 2 | 3 | INCLUDE MACROS 4 | INCLUDE CDDATA 5 | 6 | PUBLIC INSTALL_SOFT_PENT 7 | 8 | ; 9 | ; DS:SI (CX) IS SYMBOL TO BE ADDED TO LIST OF COMDAT SOFT REFERENCES 10 | ; 11 | 12 | .DATA 13 | 14 | EXTERNDEF MYCOMDAT_LINDEX:DWORD 15 | 16 | 17 | .CODE PASS1_TEXT 18 | 19 | EXTERNDEF ALLOC_LOCAL:PROC 20 | 21 | 22 | INSTALL_SOFT_PENT PROC 23 | ; 24 | ;EAX IS PENT_GINDEX TO ADD TO LIST OF PENTS REFERENCED BY THIS COMDAT... 25 | ; 26 | PUSH ESI 27 | MOV ESI,EAX 28 | 29 | MOV EAX,MYCOMDAT_LINDEX ;LATEST COMDAT REFERENCED 30 | CONVERT_MYCOMDAT_EAX_ECX 31 | 32 | PUSH EBX 33 | MOV EBX,ECX 34 | 35 | MOV EDX,ESI 36 | LEA ESI,[ECX].MYCOMDAT_STRUCT._MCD_FIRST_SOFT_PENT_BLOCK 37 | 38 | XOR ECX,ECX 39 | L1$: 40 | MOV EAX,[ESI] 41 | 42 | TEST EAX,EAX ;NEXT BLOCK EXISTS? 43 | JZ L8$ ;NOPE, GO CREATE IT 44 | 45 | MOV ECX,[EAX] ;SCAN FOR MATCHING SYMBOL 46 | LEA ESI,[EAX+4] 47 | 48 | MOV EBX,ECX 49 | L2$: 50 | MOV EAX,[ESI] 51 | ADD ESI,8 52 | 53 | CMP EAX,EDX 54 | JZ L9$ ;JUMP IF MATCH 55 | 56 | DEC ECX 57 | JNZ L2$ 58 | 59 | CMP EBX,SOFT_PER_BLK 60 | JZ L1$ 61 | ; 62 | ;ROOM FOR ANOTHER, STORE IT 63 | ; 64 | LEA EAX,[EBX*8] 65 | MOV [ESI],EDX 66 | 67 | MOV [ESI+4],ECX 68 | SUB ESI,EAX 69 | 70 | INC EBX 71 | 72 | MOV [ESI-4],EBX 73 | 74 | POPM EBX,ESI 75 | 76 | RET 77 | 78 | L9$: 79 | INC DPTR [ESI-4] 80 | POPM EBX,ESI 81 | 82 | RET 83 | 84 | 85 | L8$: 86 | ; 87 | ;CREATE NEW BLOCK, ES:DI GETS POINTER, DX 88 | ; 89 | MOV EAX,SOFT_PER_BLK*8+8 90 | CALL ALLOC_LOCAL 91 | 92 | PUSH EDI 93 | MOV [ESI],EAX 94 | 95 | LEA EDI,[EAX+8] 96 | MOV DPTR [EAX],1 97 | 98 | MOV DPTR [EAX+4],EDX 99 | MOV ECX,(SOFT_PER_BLK*8+8-8)/4 100 | 101 | XOR EAX,EAX 102 | 103 | REP STOSD 104 | 105 | POPM EDI,EBX,ESI 106 | 107 | RET 108 | 109 | INSTALL_SOFT_PENT ENDP 110 | 111 | 112 | END 113 | 114 | -------------------------------------------------------------------------------- /moves/go.bat: -------------------------------------------------------------------------------- 1 | NMAKE MOVES.MAK %1= 2 | 3 | -------------------------------------------------------------------------------- /moves/moves.mak: -------------------------------------------------------------------------------- 1 | !INCLUDE ..\COMMON\MAKEMACS 2 | 3 | 4 | FLAGS = $(MASMFLAGS) 5 | SRC = $(BASE)\MOVES 6 | CFLAGS=$(DMCFLAGS) 7 | 8 | 9 | ALL : $(LIB)\MOVES.LIB 10 | 11 | 12 | $(LIB)\MOVES.LIB : $(OBJ)\MVLNAME.OBJ $(OBJ)\PUBCHECK.OBJ $(OBJ)\DOPUBLIC.OBJ \ 13 | $(OBJ)\PUTDATA.OBJ $(OBJ)\FAKELEDA.OBJ $(OBJ)\putdatac.obj 14 | del $(LIB)\moves.lib 15 | $(BUILD_LIB) 16 | 17 | 18 | $(OBJ)\PUTDATA.OBJ : PUTDATA.ASM ..\COMMON\IO_STRUC ..\COMMON\MACROS 19 | ML $(FLAGS) $(SRC)\PUTDATA.ASM 20 | 21 | $(OBJ)\MVLNAME.OBJ : MVLNAME.ASM ..\COMMON\MACROS 22 | ML $(FLAGS) $(SRC)\MVLNAME.ASM 23 | 24 | $(OBJ)\PUBCHECK.OBJ : PUBCHECK.ASM ..\COMMON\MACROS 25 | ML $(FLAGS) $(SRC)\PUBCHECK.ASM 26 | 27 | $(OBJ)\DOPUBLIC.OBJ : DOPUBLIC.ASM ..\COMMON\MACROS ..\COMMON\SYMBOLS ..\COMMON\SEGMENTS ..\COMMON\CDDATA 28 | ML $(FLAGS) $(SRC)\DOPUBLIC.ASM 29 | 30 | $(OBJ)\FAKELEDA.OBJ : FAKELEDA.ASM ..\COMMON\MACROS ..\COMMON\SEGMENTS 31 | ML $(FLAGS) $(SRC)\FAKELEDA.ASM 32 | 33 | 34 | $(OBJ)\putdatac.obj : putdatac.c 35 | dmc -N_ -c putdatac -NTPASS2_TEXT $(CFLAGS) -o$(OBJ)\putdatac.obj 36 | 37 | -------------------------------------------------------------------------------- /moves/mvlname.asm: -------------------------------------------------------------------------------- 1 | TITLE MVLNAME - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC MOVE_ASCIZ_ESI_EDI,MOVE_ASCIZ_ECX_EAX 6 | 7 | 8 | .CODE ROOT_TEXT 9 | 10 | 11 | MOVE_ASCIZ_ECX_EAX PROC 12 | ; 13 | ;ECX IS SOURCE, EAX IS DESTINATION 14 | ; 15 | TEST AL,3 16 | JNZ L8$ 17 | 18 | MOV EDX,EAX 19 | L4$: 20 | MOV EAX,[ECX] 21 | ADD ECX,4 22 | 23 | MOV [EDX],EAX 24 | ADD EDX,4 25 | 26 | TEST AL,AL 27 | JZ L0$ 28 | 29 | TEST AH,AH 30 | JZ L1$ 31 | 32 | TEST EAX,00FF0000H 33 | JZ L2$ 34 | 35 | TEST EAX,0FF000000H 36 | JNZ L4$ 37 | 38 | LEA EAX,[EDX-1] 39 | 40 | RET 41 | 42 | ALIGN 4 43 | L2$: 44 | LEA EAX,[EDX-2] 45 | RET 46 | 47 | L1$: 48 | LEA EAX,[EDX-3] 49 | RET 50 | 51 | L0$: 52 | LEA EAX,[EDX-4] 53 | RET 54 | 55 | L8$: 56 | MOV DL,[ECX] 57 | INC ECX 58 | 59 | MOV [EAX],DL 60 | INC EAX 61 | 62 | TEST DL,DL 63 | JNZ L8$ 64 | 65 | DEC EAX 66 | 67 | RET 68 | 69 | MOVE_ASCIZ_ECX_EAX ENDP 70 | 71 | 72 | MOVE_ASCIZ_ESI_EDI PROC 73 | ; 74 | ;ESI IS SOURCE, EDI IS DESTINATION 75 | ; 76 | TEST ESI,3 77 | JNZ L8$ 78 | L4$: 79 | MOV EAX,[ESI] 80 | ADD ESI,4 81 | 82 | MOV [EDI],EAX 83 | ADD EDI,4 84 | 85 | TEST AL,AL 86 | JZ L0$ 87 | 88 | TEST AH,AH 89 | JZ L1$ 90 | 91 | TEST EAX,00FF0000H 92 | JZ L2$ 93 | 94 | TEST EAX,0FF000000H 95 | JNZ L4$ 96 | 97 | DEC EDI 98 | 99 | RET 100 | 101 | ALIGN 4 102 | L2$: 103 | LEA EDI,[EDI-2] 104 | RET 105 | 106 | L1$: 107 | LEA EDI,[EDI-3] 108 | RET 109 | 110 | L0$: 111 | LEA EDI,[EDI-4] 112 | RET 113 | 114 | L8$: 115 | MOV AL,[ESI] 116 | INC ESI 117 | 118 | MOV [EDI],AL 119 | INC EDI 120 | 121 | TEST AL,AL 122 | JNZ L8$ 123 | 124 | DEC EDI 125 | 126 | RET 127 | 128 | MOVE_ASCIZ_ESI_EDI ENDP 129 | 130 | 131 | END 132 | 133 | -------------------------------------------------------------------------------- /moves/mvlname.d: -------------------------------------------------------------------------------- 1 | 2 | // MVLNAME - Copyright (c) SLR Systems 1994 3 | 4 | ubyte* MOVE_ASCIZ_ECX_EAX(ubyte* ECX, ubyte* EAX) 5 | { 6 | // ECX IS SOURCE, EAX IS DESTINATION 7 | size_t len = strlen(ECX); 8 | return memcpy(EAX, ECX, len + 1) + len; 9 | } 10 | 11 | 12 | ubyte* MOVE_ASCIZ_ESI_EDI(ubyte* ESI, ubyte* EDI) 13 | { 14 | // ESI IS SOURCE, EDI IS DESTINATION 15 | return MOVE_ASCIZ_ECX_EAX(ESI, EDI); 16 | } 17 | -------------------------------------------------------------------------------- /moves/pubcheck.d: -------------------------------------------------------------------------------- 1 | // PUBCHECK - Copyright (c) SLR Systems 1994 2 | 3 | 4 | PUB_CHECK(ESI) 5 | { 6 | // ESI IS OBJ_INPUT_DATA 7 | // RETURNS ESI UPDATED 8 | 9 | if (PUB_SIZE) 10 | { // 32 bit record 11 | // DO WE DO ANY MORE? 12 | while (END_OF_RECORD > ESI) 13 | { 14 | // NOW, WE ENTER LOOP READING PUBLIC SYMBOLS AND OFFSETS 15 | 16 | TPTR_STRUCT* EDI = &SYMBOL_TPTR; 17 | GET_NAME_HASH // TOO ;MUST PRESERVE EDX TILL INSTALL 18 | EAX = [ESI]; 19 | ESI += 4; 20 | PUB_OFFSET = EAX; 21 | BUFFER_OFFSET = ESI; 22 | 23 | NEXT_INDEXI 24 | ECX = TYPDEF_ANDER; 25 | 26 | // SKIP IF NO CV THIS MODULE 27 | EAX &= ECX; 28 | PUB_CV = EAX; 29 | DO_PUBLIC(); 30 | } 31 | } 32 | else 33 | { // 16 bit record 34 | // DO WE DO ANY MORE? 35 | while (END_OF_RECORD > ESI) 36 | { 37 | // NOW, WE ENTER LOOP READING PUBLIC SYMBOLS AND OFFSETS 38 | 39 | TPTR_STRUCT* EDI = &SYMBOL_TPTR; 40 | GET_NAME_HASH // MUST PRESERVE EDX TILL INSTALL 41 | EAX = [ESI]; 42 | BUFFER_OFFSET = ESI; 43 | EAX &= 0FFFFH; 44 | ESI += 2; 45 | PUB_OFFSET = EAX; 46 | 47 | NEXT_INDEXI 48 | ECX = TYPDEF_ANDER; 49 | 50 | // SKIP IF NO CV THIS MODULE 51 | EAX &= ECX; 52 | PUB_CV = EAX; 53 | DO_PUBLIC(); 54 | } 55 | } 56 | 57 | if (END_OF_RECORD != ESI) 58 | OBJ_PHASE(); 59 | return ESI; 60 | } 61 | 62 | -------------------------------------------------------------------------------- /moves/putdata.asm: -------------------------------------------------------------------------------- 1 | TITLE PUTDATA - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | 7 | PUBLIC LST_OUT 8 | 9 | 10 | .CODE PASS2_TEXT 11 | 12 | EXTERNDEF _imp_out:proc 13 | EXTERNDEF _lst_out:proc 14 | 15 | 16 | 17 | if fg_segm 18 | PUBLIC IMP_OUT 19 | 20 | IMP_OUT LABEL PROC 21 | push ECX 22 | push EAX 23 | call _imp_out 24 | add ESP,8 25 | ret 26 | 27 | endif 28 | 29 | LST_OUT LABEL PROC 30 | push ECX 31 | push EAX 32 | call _lst_out 33 | add ESP,8 34 | ret 35 | 36 | PUT_DATA PROC 37 | PUT_DATA ENDP 38 | 39 | 40 | END 41 | 42 | -------------------------------------------------------------------------------- /moves/putdata.d: -------------------------------------------------------------------------------- 1 | // PUTDATA - Copyright (c) SLR Systems 1994 2 | 3 | 4 | version(fg_segm) 5 | { 6 | IMP_OUT(EAX, ECX) 7 | { 8 | put_data(EAX, ECX, IMP_DEVICE); 9 | } 10 | } 11 | 12 | LST_OUT(EAX, ECX) 13 | { 14 | // EAX IS POINTER 15 | // ECX IS BYTE COUNT 16 | 17 | version(fgh_mapthread) 18 | { 19 | // ERRORS AND WRITEMAP MAY BOTH WANT.. 20 | CAPTURE PUT_DATA_SEM 21 | put_data(EAX, ECX, MAP_DEVICE); 22 | RELEASE PUT_DATA_SEM 23 | } 24 | else 25 | { 26 | put_data(EAX, ECX, MAP_DEVICE); 27 | } 28 | } 29 | 30 | private put_data(ps, uint count, MYO_STRUCT* pm) 31 | { 32 | // PUT DATA TO ANY OUTPUT STRUCTURE POINTED TO BY BX 33 | // FLUSH IF BUFFER IS FULL 34 | 35 | // ps IS SOURCE 36 | // count IS BYTE COUNT 37 | // pm IS BUFFER STRUCTURE 38 | 39 | if (count && pm) 40 | { 41 | pm.MYO_BYTE_OFFSET = pm.MYO_BYTE_OFFSET + count; 42 | while (1) 43 | { 44 | if (pm.MYO_COUNT >= count) 45 | { pm.MYO_COUNT -= count; 46 | break; 47 | } 48 | 49 | if (pm.MYO_COUNT) 50 | { 51 | memcpy(pm.MYO_PTR, ps, pm.MYO_COUNT); 52 | pm.MYO_PTR += pm.MYO_COUNT; 53 | count -= pm.MYO_COUNT; 54 | pm.MYO_COUNT = 0; 55 | } 56 | pm.MYO_FLUSHBUF(); 57 | } 58 | 59 | memcpy(pm.MYO_PTR, ps, count); 60 | pm.MYO_PTR += count; 61 | } 62 | } 63 | 64 | -------------------------------------------------------------------------------- /moves/putdatac.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | void _put_data(void *ps, unsigned count, MYO_STRUCT* pm) 5 | { 6 | // PUT DATA TO ANY OUTPUT STRUCTURE POINTED TO BY BX 7 | // FLUSH IF BUFFER IS FULL 8 | 9 | // ps IS SOURCE 10 | // count IS BYTE COUNT 11 | // pm IS BUFFER STRUCTURE 12 | 13 | if (count && pm) 14 | { 15 | pm->MYO_BYTE_OFFSET = pm->MYO_BYTE_OFFSET + count; 16 | while (1) 17 | { 18 | if (pm->MYO_COUNT >= count) 19 | { pm->MYO_COUNT -= count; 20 | break; 21 | } 22 | 23 | if (pm->MYO_COUNT) 24 | { 25 | memcpy(pm->MYO_PTR, ps, pm->MYO_COUNT); 26 | pm->MYO_PTR += pm->MYO_COUNT; 27 | ps = (char*) ps + pm->MYO_COUNT; 28 | count -= pm->MYO_COUNT; 29 | pm->MYO_COUNT = 0; 30 | } 31 | pm->MYO_FLUSHBUF(pm); 32 | } 33 | 34 | memcpy(pm->MYO_PTR, ps, count); 35 | pm->MYO_PTR += count; 36 | } 37 | } 38 | 39 | void _imp_out(void *EAX, unsigned ECX) 40 | { 41 | _put_data(EAX, ECX, IMP_DEVICE); 42 | } 43 | 44 | void _lst_out(void *EAX, unsigned ECX) 45 | { 46 | // EAX IS POINTER 47 | // ECX IS BYTE COUNT 48 | 49 | // ERRORS AND WRITEMAP MAY BOTH WANT.. 50 | _capture_eax(&PUT_DATA_SEM); 51 | _put_data(EAX, ECX, MAP_DEVICE); 52 | _release_eax(&PUT_DATA_SEM); 53 | } 54 | 55 | 56 | -------------------------------------------------------------------------------- /ntio/capture.asm: -------------------------------------------------------------------------------- 1 | TITLE CAPTURE - Copyright (C) 1994 SLR Systems 2 | 3 | INCLUDE MACROS 4 | INCLUDE WIN32DEF 5 | 6 | PUBLIC CAPTURE_EAX,RELEASE_EAX,RELEASE_EAX_BUMP 7 | 8 | 9 | .CODE ROOT_TEXT 10 | 11 | externdef _capture_eax:proc 12 | externdef _release_eax:proc 13 | externdef _release_eax_bump:proc 14 | 15 | CAPTURE_EAX PROC 16 | push ECX 17 | push EDX 18 | 19 | push EAX 20 | call _capture_eax 21 | add ESP,4 22 | 23 | pop EDX 24 | pop ECX 25 | ret 26 | CAPTURE_EAX ENDP 27 | 28 | 29 | RELEASE_EAX PROC 30 | push ECX 31 | push EDX 32 | 33 | push EAX 34 | call _release_eax 35 | add ESP,4 36 | 37 | pop EDX 38 | pop ECX 39 | ret 40 | RELEASE_EAX ENDP 41 | 42 | 43 | RELEASE_EAX_BUMP PROC 44 | push ECX 45 | push EDX 46 | 47 | push EAX 48 | call _release_eax_bump 49 | add ESP,4 50 | 51 | pop EDX 52 | pop ECX 53 | ret 54 | RELEASE_EAX_BUMP ENDP 55 | 56 | 57 | END 58 | 59 | -------------------------------------------------------------------------------- /ntio/cvpackrn.asm: -------------------------------------------------------------------------------- 1 | TITLE CVPACKRN - Copyright (c) SLR Systems 1992 2 | 3 | INCLUDE MACROS 4 | 5 | if 0 6 | 7 | PUBLIC CVPACK_RUNNER 8 | 9 | .DATA 10 | 11 | SOFT EXTB FILNAM,TEMP_RECORD,ASCIZ 12 | 13 | SOFT EXTW PSP_SAVER,STARTING_SP,HOST_BASE 14 | 15 | .CODE ROOT_TEXT 16 | 17 | ASSUME DS:NOTHING 18 | 19 | SOFT EXTF $$SLR_OVL_TERM 20 | 21 | if fgh_dpmi 22 | 23 | CMDLINE EQU TEMP_RECORD 24 | 25 | CVPACK_RUNNER PROC 26 | ; 27 | ;EVERYTHING IS FINISHED EXCEPT ME... 28 | ; 29 | FIXDS 30 | MOV SP,STARTING_SP ;SO I CAN JUST RETURN TO 31 | LEA SI,FILNAM ;DPMI LOADER 32 | LEA BX,TEMP_RECORD 33 | RETF 34 | 35 | CVPACK_RUNNER ENDP 36 | 37 | else 38 | 39 | CVPACK_RUNNER PROC 40 | ; 41 | ;THIS NEVER RETURNS... 42 | ; 43 | FIXDS 44 | LEA SI,FILNAM 45 | PUSH CS 46 | POP ES 47 | LEA DI,ASCIZ 48 | LODSW 49 | MOV CX,AX 50 | REP MOVSB 51 | XOR AX,AX 52 | STOSW 53 | LEA SI,TEMP_RECORD 54 | LEA DI,CMDLINE 55 | LODSW 56 | STOSB 57 | MOV CX,AX 58 | REP MOVSB 59 | MOV AL,0DH 60 | STOSB 61 | CALL $$SLR_OVL_TERM ;MAKE SURE OVERLAY SYSTEM RELEASED 62 | MOV ES,HOST_BASE 63 | MOV AH,49H 64 | INT21 65 | ; 66 | ;SHRINK ME 67 | ; 68 | MOV DX,PSP_SAVER 69 | LEA BX,MYEND+16 70 | AND BX,0FFF0H 71 | MOV AX,CS 72 | MOV SS,AX ;CHANGE TO NEW STACK 73 | MOV SP,BX 74 | MOV DS,AX 75 | ASSUME SS:@code,DS:@code 76 | 77 | SHRI BX,4 78 | ADD BX,AX ;LAST PARAGRAPH I WANT 79 | MOV ES,DX 80 | ASSUME ES:NOTHING 81 | SUB BX,DX 82 | MOV AH,4AH 83 | INT21 84 | MOV AX,SS 85 | MOV ES,AX 86 | ASSUME ES:@code 87 | LEA DX,ASCIZ 88 | LEA BX,PARAM_BLOCK 89 | MOV AX,4B00H 90 | INT 21H 91 | JC 9$ 92 | MOV AH,4DH 93 | INT 21H 94 | 9$: 95 | MOV AH,4CH 96 | INT 21H 97 | 98 | CVPACK_RUNNER ENDP 99 | 100 | PARAM_BLOCK DW 0 101 | DD CMDLINE 102 | DD 0 103 | DD 0 104 | 105 | ALIGN 16 106 | 107 | CMDLINE EQU $ 108 | 109 | ASCIZ EQU CMDLINE+128 110 | 111 | MYSTACK EQU ASCIZ+256 112 | 113 | 114 | MYEND EQU MYSTACK+512 115 | 116 | endif 117 | 118 | endif 119 | 120 | END 121 | 122 | -------------------------------------------------------------------------------- /ntio/dosio.asm: -------------------------------------------------------------------------------- 1 | TITLE DOSIO - Copyright (c) 1994 by SLR Systems 2 | 3 | INCLUDE MACROS 4 | 5 | INCLUDE IO_STRUC 6 | INCLUDE EXES 7 | INCLUDE WINMACS 8 | INCLUDE WIN32DEF 9 | 10 | 11 | PUBLIC MESOUT,ERR_ABORT,AX_MESOUT,LOUTALL_CON 12 | 13 | EXTERNDEF CRLF:BYTE 14 | 15 | 16 | .DATA 17 | 18 | .CODE ROOT_TEXT 19 | 20 | externdef _cancel_terminate:proc 21 | externdef _critical_error:proc 22 | externdef _cerr_abort:proc 23 | externdef _err_abort:proc 24 | externdef _abort:proc 25 | externdef __exit:proc 26 | externdef _do_dossleep_0:proc 27 | externdef _capture_eax:proc 28 | externdef _release_eax:proc 29 | externdef _release_eax_bump:proc 30 | externdef _dos_fail_read:proc 31 | externdef _dos_fail_write:proc 32 | externdef _dos_fail_close:proc 33 | externdef _dos_fail_move:proc 34 | externdef _dos_fail_seteof:proc 35 | externdef _close_handle:proc 36 | externdef _loutall_con:proc 37 | externdef _mesout:proc 38 | externdef _delete_exe:proc 39 | externdef _doswrite:proc 40 | externdef _dosread:proc 41 | externdef _dosposition_i:proc 42 | externdef _release_block:proc 43 | externdef _read_16k_threaded:proc 44 | externdef _err_nfn_abort:proc 45 | externdef _err_file_list_abort:proc 46 | externdef _n_nonres_table:proc 47 | externdef _n_res_table:proc 48 | 49 | ERR_ABORT PROC 50 | push EAX 51 | call _err_abort 52 | ERR_ABORT endp 53 | 54 | MESOUT PROC 55 | push EAX 56 | call _mesout 57 | add ESP,4 58 | ret 59 | MESOUT ENDP 60 | 61 | 62 | AX_MESOUT EQU (MESOUT) 63 | 64 | 65 | LOUTALL_CON PROC 66 | ;EAX IS POINTER, ECX IS BYTE COUNT, DO IT... 67 | push EAX 68 | push ECX 69 | call _loutall_con 70 | add ESP,8 71 | ret 72 | LOUTALL_CON ENDP 73 | 74 | END 75 | 76 | -------------------------------------------------------------------------------- /ntio/dosposa.asm: -------------------------------------------------------------------------------- 1 | TITLE DOSPOSITION_A 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | PUBLIC DOSPOSITION_A 7 | 8 | 9 | .CODE ROOT_TEXT 10 | 11 | DOSPOSITION_A PROC 12 | ; 13 | ;EAX IS MYO_STRUCT 14 | ;ECX IS DESIRED POSITION 15 | ; 16 | ;RETURNS EAX == MYO_STRUCT 17 | ; 18 | ASSUME EAX:PTR MYO_STRUCT 19 | 20 | OR [EAX].MYO_SPEC_FLAGS,MASK F_SEEK_FIRST 21 | MOV [EAX].MYO_DESPOT,ECX 22 | 23 | RET 24 | 25 | DOSPOSITION_A ENDP 26 | 27 | 28 | END 29 | 30 | -------------------------------------------------------------------------------- /ntio/dosposac.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "all.h" 4 | 5 | MYO_STRUCT *_dosposition_a(MYO_STRUCT *EAX, int ECX) 6 | { 7 | EAX->MYO_SPEC_FLAGS |= F_SEEK_FIRST; 8 | EAX->MYO_DESPOT = ECX; 9 | return EAX; 10 | } 11 | -------------------------------------------------------------------------------- /ntio/doswritec.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "all.h" 5 | 6 | /********************* 7 | * Write block. 8 | * EAX device 9 | * ECX # of bytes 10 | * EDX buffer 11 | */ 12 | 13 | #if 0 14 | DO_DOSWRITE_CLEAR(MYO_STRUCT* EAX, unsigned ECX, void* EDX) 15 | { 16 | EAX->MYO_SPEC_FLAGS |= F_CLEAR_BLOCK; 17 | return _do_doswrite2(EAX, ECX, EDX); 18 | } 19 | #endif 20 | 21 | MYO_STRUCT *_do_doswrite_release(MYO_STRUCT* EAX, unsigned ECX, void* EDX) 22 | { 23 | EAX->MYO_SPEC_FLAGS |= F_RELEASE_BLOCK; 24 | return _do_doswrite2(EAX, ECX, EDX); 25 | } 26 | 27 | 28 | MYO_STRUCT *_do_doswrite(MYO_STRUCT* EAX, unsigned ECX) 29 | { 30 | return _do_doswrite2(EAX, ECX, EAX->MYO_BLOCK); 31 | } 32 | 33 | MYO_STRUCT *_do_doswrite2(MYO_STRUCT* ESI, unsigned ECX, void* EDX) 34 | { 35 | // f_seek_first ;do dosposition please 36 | // cx <>0 ;write stuff 37 | // f_trunc_file ;truncate file at this point 38 | // f_clear_block ;clear block used 39 | // f_release_block;release block used 40 | // f_set_time ;set file time-date stamp 41 | // f_close_file ;close file now 42 | 43 | if (ECX) 44 | ESI->MYO_BLOCK = EDX; 45 | 46 | // # of bytes being written 47 | ESI->MYO_BYTES = ECX; 48 | 49 | if (ESI->MYO_SPEC_FLAGS & F_SEEK_FIRST) 50 | { 51 | // first, seek to correct location in file 52 | 53 | ECX = ESI->MYO_DESPOT; 54 | if (ECX != ESI->MYO_PHYS_ADDR) 55 | { 56 | ESI->MYO_PHYS_ADDR = ECX; 57 | if (SetFilePointer(ESI->MYO_HANDLE, ECX, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER) 58 | { 59 | _dos_fail_move(ESI); 60 | } 61 | } 62 | } 63 | 64 | if (ESI->MYO_BLOCK) 65 | { 66 | _doswrite(ESI, ESI->MYO_BYTES, ESI->MYO_BLOCK); 67 | } 68 | 69 | if (ESI->MYO_SPEC_FLAGS & F_TRUNC_FILE) 70 | { 71 | if (SetEndOfFile(ESI->MYO_HANDLE) == 0) 72 | _dos_fail_seteof(ESI); 73 | } 74 | 75 | if (ESI->MYO_SPEC_FLAGS & (F_CLEAR_BLOCK | F_RELEASE_BLOCK)) 76 | { 77 | void *p = ESI->MYO_BLOCK; 78 | ESI->MYO_BLOCK = NULL; 79 | 80 | if (ESI->MYO_SPEC_FLAGS & F_RELEASE_BLOCK && p) 81 | _release_io_segment(p); 82 | } 83 | 84 | // eof? 85 | if (ESI->MYO_SPEC_FLAGS & F_CLOSE_FILE) 86 | { 87 | HANDLE EAX = ESI->MYO_HANDLE; 88 | ESI->MYO_BUSY = 0; 89 | if (EAX) 90 | { 91 | ESI->MYO_HANDLE = 0; 92 | _close_handle(EAX); 93 | } 94 | } 95 | ESI->MYO_SPEC_FLAGS = 0; 96 | return ESI; 97 | } 98 | 99 | -------------------------------------------------------------------------------- /ntio/dot.asm: -------------------------------------------------------------------------------- 1 | INCLUDE MACROS 2 | 3 | 4 | .CODE ROOT_TEXT 5 | 6 | EXTERNDEF LOUTALL_CON:PROC 7 | 8 | PUBLIC DOT 9 | 10 | 11 | DOT PROC 12 | ; 13 | ; 14 | ; 15 | PUSHAD 16 | MOV EAX,OFF DOT_DAT 17 | MOV ECX,1 18 | CALL LOUTALL_CON 19 | POPAD 20 | RET 21 | 22 | DOT ENDP 23 | 24 | 25 | .DATA 26 | 27 | DOT_DAT DB '.' 28 | 29 | END 30 | 31 | -------------------------------------------------------------------------------- /ntio/dotc.c: -------------------------------------------------------------------------------- 1 | 2 | int _loutall_con(unsigned nbytes, char *ptr); 3 | 4 | void DOT() 5 | { 6 | _asm 7 | { 8 | pushad 9 | } 10 | _loutall_con(1, "."); 11 | _asm 12 | { 13 | popad 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ntio/fancyc.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | /****** 5 | * returns NULL on error 6 | */ 7 | 8 | MYI_STRUCT *_fancy_open_input(NFN_STRUCT *ESI, FILE_LISTS *ECX) 9 | { 10 | // ESI is NFN_STRUCT containing raw filename 11 | // ECX is list of paths 12 | 13 | if (!_open_input(ESI, &OBJ_DEVICE)) 14 | return OBJ_DEVICE; 15 | 16 | // Well, it would have been nice 17 | 18 | if (ESI->NFN_FLAGS & NFN_PATH_SPECIFIED) 19 | goto FANCY_FAIL; 20 | 21 | FILE_LIST_STRUCT *EDI = ECX->FILE_FIRST_GINDEX; 22 | 23 | goto TEST_PATH; 24 | 25 | PATH_LOOP: 26 | if (EDI->FILE_LIST_NFN.NFN_FLAGS & NFN_PATH_SPECIFIED) // skip 'NUL' 27 | { 28 | // Need to move just path 29 | if (!_open_input(_move_ecxpath_eax(ESI, &EDI->FILE_LIST_NFN), &OBJ_DEVICE)) 30 | { 31 | FILE_LIST_STRUCT *EDX = CURN_FILE_LIST_GINDEX; 32 | if (EDX) 33 | EDX->FILE_LIST_PATH_GINDEX = EDI; 34 | return OBJ_DEVICE; 35 | } 36 | } 37 | 38 | // Try next path 39 | TEST_PATH: 40 | EDI = EDI->FILE_LIST_NEXT_GINDEX; 41 | if (EDI) 42 | goto PATH_LOOP; 43 | FANCY_FAIL: 44 | _delete_phantom_path(ESI); 45 | return 0; 46 | } 47 | 48 | void _delete_phantom_path(NFN_STRUCT *ESI) 49 | { 50 | static NFN_STRUCT NUL_PATH; 51 | 52 | if (!(ESI->NFN_FLAGS & NFN_PATH_SPECIFIED)) 53 | { 54 | _move_ecxpath_eax(ESI, &NUL_PATH); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /ntio/findfirsc.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "all.h" 5 | 6 | WIN32_FIND_DATA WIN32FINDDATA; 7 | HANDLE FINDNEXT_HANDLE = INVALID_HANDLE_VALUE; 8 | 9 | static NFN_STRUCT *process_file(NFN_STRUCT *ESI); 10 | 11 | NFN_STRUCT *_do_findfirst(NFN_STRUCT* EAX) 12 | { 13 | // Find first matching file and return it 14 | 15 | FINDNEXT_HANDLE = FindFirstFile((char *)EAX->NFN_TEXT, &WIN32FINDDATA); 16 | if (FINDNEXT_HANDLE != INVALID_HANDLE_VALUE) 17 | return process_file(EAX); 18 | return NULL; 19 | } 20 | 21 | 22 | NFN_STRUCT *_do_findnext(NFN_STRUCT *EAX) 23 | { 24 | int h = FindNextFile(FINDNEXT_HANDLE, &WIN32FINDDATA); 25 | if (!h) 26 | { 27 | return NULL; 28 | } 29 | return process_file(EAX); 30 | } 31 | 32 | static NFN_STRUCT *process_file(NFN_STRUCT *ESI) 33 | { 34 | ESI->NFN_FILE_LENGTH = WIN32FINDDATA.nFileSizeLow; 35 | 36 | unsigned char *ECX = (unsigned char *)&WIN32FINDDATA.cFileName[0]; 37 | unsigned char *EDX = &ESI->NFN_TEXT[ESI->NFN_PATHLEN]; 38 | 39 | // move till 0 40 | char c; 41 | do 42 | { 43 | c = *ECX++; 44 | *EDX++ = c; 45 | } while (c); 46 | 47 | ECX = &ESI->NFN_TEXT[0] + 1; 48 | *((int*)EDX) = 0; 49 | 50 | ESI->NFN_TOTAL_LENGTH = EDX - ECX; 51 | 52 | NFN_STRUCT *s = _parse_filename(ESI); 53 | ESI->NFN_FLAGS |= NFN_TIME_VALID | NFN_AMBIGUOUS; 54 | return s; 55 | } 56 | 57 | void _close_findnext() 58 | { 59 | if (FINDNEXT_HANDLE != INVALID_HANDLE_VALUE) 60 | { 61 | FindClose(FINDNEXT_HANDLE); 62 | FINDNEXT_HANDLE = INVALID_HANDLE_VALUE; 63 | } 64 | } 65 | 66 | #if 0 67 | __declspec(naked) void DO_FINDFIRST() 68 | { 69 | __asm 70 | { 71 | push EAX 72 | call _do_findfirst 73 | pop ECX 74 | ret 75 | } 76 | } 77 | 78 | __declspec(naked) void DO_FINDNEXT() 79 | { 80 | __asm 81 | { 82 | push EAX 83 | call _do_findnext 84 | pop ECX 85 | ret 86 | } 87 | } 88 | 89 | 90 | __declspec(naked) void CLOSE_FINDNEXT() 91 | { 92 | __asm 93 | { 94 | call _close_findnext 95 | ret 96 | } 97 | } 98 | #endif 99 | 100 | 101 | -------------------------------------------------------------------------------- /ntio/gettime.asm: -------------------------------------------------------------------------------- 1 | TITLE GETTIME - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE WIN32DEF 5 | 6 | PUBLIC GET_TIME_AND_DATE 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF CURN_HOUR:BYTE,CURN_MINUTE:BYTE,CURN_SECOND:BYTE,CURN_HUNDREDTH:BYTE,CURN_MONTH:BYTE,CURN_DAY:BYTE 12 | 13 | EXTERNDEF CURN_YEAR:DWORD,CURN_DATE_DWD:DWORD,CURN_TIME_DWD:DWORD 14 | 15 | 16 | .CODE ROOT_TEXT 17 | 18 | 19 | GET_TIME_AND_DATE PROC 20 | ; 21 | ; 22 | ; 23 | PUSH OFF SYSTEM_TIME 24 | CALL GetLocalTime 25 | 26 | PUSH EBX 27 | MOV EBX,OFF SYSTEM_TIME 28 | ASSUME EBX:PTR SYSTEMTIME 29 | 30 | MOV EAX,DPTR [EBX].WYEAR 31 | MOV DL,BPTR [EBX].WDAY 32 | 33 | MOV DH,BPTR [EBX].WMONTH 34 | AND EAX,0FFFFH 35 | 36 | MOV CURN_MONTH,DH 37 | MOV CURN_DAY,DL 38 | 39 | MOV CURN_YEAR,EAX 40 | SUB EAX,1980 41 | 42 | XOR ECX,ECX 43 | 44 | SHL EAX,9 45 | MOV CL,DH 46 | 47 | AND DL,1FH 48 | 49 | SHL ECX,5 50 | OR AL,DL 51 | 52 | OR EAX,ECX 53 | 54 | MOV CURN_DATE_DWD,EAX 55 | 56 | MOV AX,[EBX].WMILLISECONDS 57 | MOV DL,10 58 | 59 | DIV DL 60 | 61 | MOV CH,BPTR [EBX].WHOUR 62 | MOV DH,BPTR [EBX].WSECOND 63 | 64 | MOV CL,BPTR [EBX].WMINUTE 65 | MOV DL,AL ;CH=HOUR (0-23), CL=MIN (0-59), DH=SEC (0-59), DL=HUNDREDTHS (0-99) 66 | 67 | MOV AL,CH 68 | MOV CURN_HOUR,CH 69 | 70 | AND EAX,0FFH 71 | MOV CURN_MINUTE,CL 72 | 73 | SHL EAX,6 74 | MOV CURN_SECOND,DH 75 | 76 | OR AL,CL 77 | MOV CURN_HUNDREDTH,DL 78 | 79 | SHL EAX,5 80 | 81 | SHR DH,1 82 | 83 | OR AL,DH 84 | POP EBX 85 | 86 | MOV CURN_TIME_DWD,EAX 87 | 88 | RET 89 | 90 | GET_TIME_AND_DATE ENDP 91 | 92 | 93 | .DATA? 94 | 95 | SYSTEM_TIME DD 4 DUP(?) 96 | 97 | END 98 | 99 | -------------------------------------------------------------------------------- /ntio/gettimec.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "all.h" 5 | 6 | 7 | void GET_TIME_AND_DATE() 8 | { 9 | SYSTEMTIME st; 10 | 11 | GetLocalTime(&st); 12 | 13 | CURN_MONTH = st.wMonth; 14 | CURN_DAY = st.wDay; 15 | CURN_YEAR = st.wYear; 16 | CURN_DATE_DWD = (((st.wYear & 0xFFFF) - 1980) << 9) | 17 | (st.wMonth << 5) | 18 | (st.wDay & 0x1F); 19 | 20 | CURN_HOUR = st.wHour; 21 | CURN_MINUTE = st.wMinute; 22 | CURN_SECOND = st.wSecond; 23 | CURN_HUNDREDTH = st.wMilliseconds / 10; 24 | CURN_TIME_DWD = (((st.wHour << 6) | st.wMinute) << 5) | (st.wSecond >> 1); 25 | } 26 | 27 | -------------------------------------------------------------------------------- /ntio/go.bat: -------------------------------------------------------------------------------- 1 | NMAKE NTIO.MAK %1= 2 | -------------------------------------------------------------------------------- /ntio/libstuffc.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | MYI_STRUCT *_readlib_16k(MYI_STRUCT *myi) 5 | { 6 | // maybe get rid of this block 7 | _dec_lib_block(); 8 | 9 | CURN_LIB_BLOCK++; 10 | 11 | void **EBX = CURN_LIB_BLOCK_PTR + 2; 12 | if (CURN_LIB_BLOCK_PTR_LIMIT == EBX) 13 | goto L2; 14 | L1: 15 | CURN_LIB_BLOCK_PTR = EBX; 16 | void *EAX = *EBX; 17 | if (EAX) 18 | goto L5; 19 | _read_library_block(CURN_LIB_BLOCK); 20 | 21 | EAX = *EBX; 22 | goto L5; 23 | 24 | L2: 25 | EBX = *CURN_LS_BLOCK_TABLE_PTR++; 26 | CURN_LIB_BLOCK_PTR_LIMIT = EBX + PAGE_SIZE; 27 | goto L1; 28 | 29 | L5: 30 | MYI_STRUCT* ms = OBJ_DEVICE; 31 | ms->MYI_PTRA = EAX; 32 | ms->MYI_BLOCK = EAX; 33 | 34 | LIBRARY_STRUCT *ls = CURNLIB_GINDEX; 35 | 36 | unsigned len = FILNAM.NFN_FILE_LENGTH; 37 | 38 | if (ls->_LS_BLOCKS == CURN_LIB_BLOCK + 1) 39 | { 40 | len &= PAGE_SIZE-1; 41 | if (len) 42 | goto L6; 43 | } 44 | len = PAGE_SIZE; 45 | L6: 46 | ms->MYI_COUNT = len; 47 | return 0; 48 | } 49 | 50 | ubyte *GET_FIRST_SECTOR() 51 | { 52 | if (_HOST_THREADED) 53 | { 54 | MYI2_STRUCT* ECX = OBJ_DEVICE->MYI_LOCALS; 55 | 56 | OPEN_STRUCT* os = &ECX->MYI2_OPEN_STRUC[ECX->MYI2_NEXT_OPEN_FILE]; 57 | _capture_eax(&ECX->OPENFILE_HEADER_SEM); 58 | return &os->OPENFILE_HEADER[0]; 59 | } 60 | 61 | // allocate a place to put first sector of library file 62 | _dosread(OBJ_DEVICE, 16, &LIB_HEADER[0]); 63 | return &LIB_HEADER[0]; 64 | } 65 | 66 | void *GET_NEW_IO_LOG_BLK(); 67 | 68 | unsigned char *READ_NEXT_DIRECTORY_BLOCK() 69 | { 70 | if (_HOST_THREADED) 71 | { 72 | MYI_STRUCT *EAX = _read_16k_threaded(OBJ_DEVICE); 73 | unsigned char *EDX = EAX->MYI_BLOCK; 74 | EAX->MYI_BLOCK = 0; 75 | EAX->MYI_PTRA = 0; 76 | return EDX; 77 | } 78 | 79 | // allocate a place to put first sector of library file 80 | 81 | unsigned ECX = DICT_BLOCKS; 82 | unsigned char *EDX = GET_NEW_IO_LOG_BLK(); 83 | CURN_DICT_LOG = EDX; 84 | 85 | // max dirs per page 86 | if (ECX > PAGE_SIZE/512) 87 | ECX = PAGE_SIZE/512; 88 | 89 | _dosread(OBJ_DEVICE, ECX * 512, EDX); 90 | return EDX; 91 | } 92 | -------------------------------------------------------------------------------- /ntio/openoutc.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "all.h" 5 | 6 | MYO_STRUCT* GET_OUTPUT_DEVICE() 7 | { 8 | // return eax as next available myo_stuff 9 | MYO_STRUCT* EAX; 10 | 11 | for (EAX = &MYO_STUFF[0]; EAX->MYO_BUSY; EAX++) 12 | ; 13 | memset(EAX, sizeof(MYO_STRUCT), 0); 14 | EAX->MYO_BUSY = -1; 15 | return EAX; 16 | } 17 | 18 | MYO_STRUCT *_open_output(FILE_LIST_STRUCT *EDI) 19 | { 20 | // eax is file_list_gindex 21 | // returns eax = myo_struct 22 | 23 | // get available device 24 | MYO_STRUCT *EBX = GET_OUTPUT_DEVICE(); 25 | 26 | EBX->MYO_FILE_LIST_GINDEX = EDI; 27 | HANDLE EAX; 28 | while (1) 29 | { 30 | EAX = CreateFile((char *)EDI->FILE_LIST_NFN.NFN_TEXT, 31 | GENERIC_WRITE, 0, 0, 32 | FORCE_CREATE ? CREATE_NEW : OPEN_ALWAYS, 33 | (EDI->FILE_LIST_FLAGS & FLF_RANDOM) 34 | ? FILE_FLAG_RANDOM_ACCESS 35 | : FILE_FLAG_SEQUENTIAL_SCAN, 36 | 0); 37 | 38 | if (EAX != INVALID_HANDLE_VALUE) 39 | break; 40 | 41 | if (_recover_handle()) 42 | goto CANT_CREATE; 43 | } 44 | 45 | EBX->MYO_HANDLE = EAX; 46 | return EBX; 47 | 48 | CANT_CREATE: 49 | // flush and stop map output 50 | _FLUSH_DISABLE_MAPOUT(); 51 | _err_file_list_abort(CANT_CREATE_ERR, EBX->MYO_FILE_LIST_GINDEX); 52 | return 0; 53 | } 54 | -------------------------------------------------------------------------------- /ntio/promptc.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "all.h" 4 | 5 | void FORCE_SIGNON(); 6 | 7 | void _proper_prompt() 8 | { 9 | _issue_prompt(); 10 | unsigned long count; 11 | 12 | if (!ReadFile(_get_stdin(), TEMP_RECORD + 4, MAX_RECORD_LEN, &count, 0)) 13 | _err_abort(0); 14 | 15 | *(int*)&TEMP_RECORD[0] = count; 16 | CURN_INPTR = TEMP_RECORD + 4; 17 | CURN_COUNT = count + 1; 18 | 19 | *(int *)(CURN_INPTR+CURN_COUNT-3) = 0x1A0A0D; 20 | } 21 | 22 | extern void *GET_STDIN(); 23 | 24 | void *_get_stdin() 25 | { 26 | // return GET_STDIN(); 27 | if (STDIN == INVALID_HANDLE_VALUE) 28 | { 29 | STDIN = GetStdHandle(STD_INPUT_HANDLE); 30 | if (STDIN == INVALID_HANDLE_VALUE) 31 | _err_abort(0); 32 | } 33 | return STDIN; 34 | } 35 | 36 | void _issue_prompt() 37 | { 38 | FORCE_SIGNON(); 39 | _do_print_defaults(); 40 | } 41 | 42 | 43 | void _do_print_defaults() 44 | { 45 | NFN_STRUCT MY_FILNAM; 46 | memset(&MY_FILNAM, 0, sizeof(NFN_STRUCT)); 47 | _do_defaults(&MY_FILNAM, FILESTUFF_PTR); // set in FILNAM 48 | 49 | #if 1 50 | printf("%.*s(%.*s):", FILESTUFF_PTR->CMD_PMSG[0], FILESTUFF_PTR->CMD_PMSG + 1, 51 | MY_FILNAM.NFN_TOTAL_LENGTH, &MY_FILNAM.NFN_TEXT); 52 | #else 53 | unsigned count = FILESTUFF_PTR->CMD_PMSG[0]; 54 | memcpy(OUTBUF, FILESTUFF_PTR->CMD_PMSG + 1, count); 55 | OUTBUF[count] = '('; 56 | 57 | memcpy(&OUTBUF[count + 1], &MY_FILNAM.NFN_TEXT, MY_FILNAM.NFN_TOTAL_LENGTH); 58 | 59 | unsigned char *EAX = &OUTBUF[count + 1 + MY_FILNAM.NFN_TOTAL_LENGTH]; 60 | EAX[0] = ')'; 61 | EAX[1] = ':'; 62 | _loutall_con(count + 1 + MY_FILNAM.NFN_TOTAL_LENGTH + 2, (char *)OUTBUF); 63 | #endif 64 | } 65 | 66 | -------------------------------------------------------------------------------- /ntio/recohndl.asm: -------------------------------------------------------------------------------- 1 | TITLE RECOHNDL - Copyright (C) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE LIBRARY 5 | INCLUDE WIN32DEF 6 | 7 | PUBLIC RECOVER_HANDLE 8 | 9 | 10 | .DATA 11 | 12 | EXTERNDEF LAST_LIB_GINDEX:DWORD,CURN_LIBNUM:DWORD,CURNLIB_GINDEX:DWORD 13 | 14 | EXTERNDEF LIBRARY_GARRAY:STD_PTR_S 15 | 16 | 17 | .CODE PASS1_TEXT 18 | 19 | EXTERNDEF _close_handle:proc 20 | 21 | 22 | RECOVER_HANDLE PROC 23 | ; 24 | ;DID WE FAIL FROM LACK OF HANDLES? 25 | ; 26 | CALL GetLastError 27 | 28 | CMP EAX,4 ;OUT OF HANDLES? 29 | JNZ L9$ ;NO, DIFFERENT ERROR, ABORT 30 | 31 | BITT HANDLES_EXPANDED 32 | JNZ L05$ 33 | 34 | SETT HANDLES_EXPANDED 35 | 36 | PUSH 255 37 | CALL SetHandleCount 38 | 39 | CMP AL,AL 40 | 41 | RET 42 | 43 | L05$: 44 | MOV EAX,LAST_LIB_GINDEX 45 | MOV EDX,CURNLIB_GINDEX 46 | 47 | TEST EAX,EAX ;ANY LIBS? 48 | JZ L9$ ;NO, ABORT 49 | L1$: 50 | CONVERT ECX,EAX,LIBRARY_GARRAY 51 | ASSUME ECX:PTR LIBRARY_STRUCT 52 | 53 | CMP EAX,EDX 54 | JZ L3$ ;SKIP ME 55 | 56 | MOV EAX,[ECX]._LS_HANDLE 57 | 58 | TEST EAX,EAX 59 | JNZ L5$ ;CLOSE IF OPEN 60 | L3$: 61 | MOV EAX,[ECX]._LS_PREV_LIB_GINDEX ;MORE LIBS? 62 | 63 | TEST EAX,EAX 64 | JNZ L1$ ;YES, JUMP 65 | L9$: 66 | OR AL,-1 67 | CMP ESP,-1 68 | 69 | RET 70 | 71 | L5$: 72 | MOV [ECX]._LS_HANDLE,0 73 | 74 | push EAX 75 | call _close_handle 76 | add ESP,4 77 | 78 | CMP AL,AL 79 | 80 | RET 81 | 82 | RECOVER_HANDLE ENDP 83 | 84 | 85 | END 86 | 87 | -------------------------------------------------------------------------------- /ntio/recohndlc.c: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (C) SLR Systems 1994 3 | 4 | #include 5 | 6 | #include "all.h" 7 | 8 | void _close_handle(void *handle); 9 | 10 | /****************** 11 | * Returns: 12 | * 0 ok 13 | * !=0 error 14 | */ 15 | 16 | int _recover_handle() 17 | { 18 | // DID WE FAIL FROM LACK OF HANDLES? 19 | int i = GetLastError(); 20 | if (i != 4) // OUT OF HANDLES? 21 | return 1; // NO, DIFFERENT ERROR, ABORT 22 | 23 | if (!(HANDLES_EXPANDED & 0xFF)) 24 | { 25 | HANDLES_EXPANDED = 0xFF; 26 | SetHandleCount(255); 27 | return 0; 28 | } 29 | 30 | struct LIBRARY_STRUCT *EAX = LAST_LIB_GINDEX; 31 | while (EAX) // while more libraries 32 | { 33 | if (EAX != CURNLIB_GINDEX) 34 | { 35 | void *h = EAX->_LS_HANDLE; 36 | if (h) 37 | { // CLOSE IF OPEN 38 | EAX->_LS_HANDLE = 0; 39 | _close_handle(h); 40 | return 0; 41 | } 42 | } 43 | EAX = EAX->_LS_PREV_LIB_GINDEX; // MORE LIBS? 44 | } 45 | return 1; 46 | } 47 | 48 | -------------------------------------------------------------------------------- /ntio/reopen.asm: -------------------------------------------------------------------------------- 1 | TITLE REOPEN - Copyright (C) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | INCLUDE WIN32DEF 6 | 7 | PUBLIC REOPEN_OUTPUT 8 | 9 | 10 | .DATA 11 | 12 | EXTERNDEF SHARE_ANDER:BYTE,ASCIZ:BYTE 13 | 14 | EXTERNDEF _FILE_LIST_GARRAY:STD_PTR_S 15 | 16 | 17 | .CODE PASS2_TEXT 18 | 19 | EXTERNDEF GET_OUTPUT_DEVICE:PROC,MOVE_FN_TO_ASCIZ:PROC,_recover_handle:PROC,_err_file_list_abort:proc 20 | 21 | EXTERNDEF CANT_REOPEN_ERR:ABS 22 | 23 | 24 | REOPEN_OUTPUT PROC 25 | ; 26 | ;FILE ALREADY EXISTS, JUST RESTORE POINTERS 27 | ; 28 | ;EAX IS OUTFILE_STRUCT 29 | ; 30 | ;RETURN EAX = MYO_STRUCT 31 | ; 32 | PUSH ESI 33 | MOV ESI,EAX 34 | ASSUME ESI:PTR OUTFILE_STRUCT 35 | 36 | CALL GET_OUTPUT_DEVICE 37 | ASSUME EAX:PTR MYO_STRUCT 38 | 39 | MOV ECX,[ESI]._OF_PHYS_ADDR 40 | MOV EDX,[ESI]._OF_FILE_LIST_GINDEX 41 | 42 | MOV [EAX].MYO_PHYS_ADDR,ECX 43 | MOV ECX,[ESI]._OF_HANDLE 44 | 45 | MOV [EAX].MYO_FILE_LIST_GINDEX,EDX 46 | TEST ECX,ECX 47 | 48 | MOV [EAX].MYO_HANDLE,ECX 49 | JZ L5$ 50 | 51 | POP ESI 52 | 53 | RET 54 | 55 | L5$: 56 | PUSH EBX 57 | MOV EBX,EAX 58 | ASSUME EBX:PTR MYO_STRUCT 59 | ; 60 | ;REALLY NEED TO REOPEN IT... 61 | ; 62 | CONVERT EDI,EDX,_FILE_LIST_GARRAY 63 | ASSUME EDI:PTR FILE_LIST_STRUCT 64 | 65 | L55$: 66 | PUSH 0 ;ATTRIBUTE FILE 67 | PUSH FILE_FLAG_RANDOM_ACCESS 68 | 69 | PUSH OPEN_EXISTING 70 | PUSH 0 ;SECURITY ATTRIBUTES 71 | 72 | PUSH 0 ;DENY ALL 73 | PUSH GENERIC_WRITE ;WRITE ACCESS 74 | 75 | LEA EDX,[EDI].FILE_LIST_NFN.NFN_TEXT 76 | 77 | PUSH EDX ;ASCIZ FILENAME 78 | CALL CreateFile 79 | 80 | CMP EAX,INVALID_HANDLE_VALUE 81 | JNZ L6$ 82 | 83 | CALL _recover_handle 84 | OR EAX,EAX 85 | JZ L55$ 86 | 87 | MOV AL,CANT_REOPEN_ERR 88 | 89 | MOV ECX,[EBX].MYO_FILE_LIST_GINDEX 90 | 91 | push ECX 92 | push EAX 93 | call _err_file_list_abort 94 | add ESP,8 95 | 96 | L6$: 97 | MOV ECX,[ESI]._OF_PHYS_ADDR 98 | MOV [EBX].MYO_HANDLE,EAX 99 | 100 | MOV [ESI]._OF_HANDLE,EAX 101 | POP EBX 102 | 103 | PUSH EAX ;SAVE HANDLE 104 | PUSH FILE_BEGIN 105 | 106 | PUSH 0 ;DISTANCE HIGH 107 | PUSH ECX ;DISTANCE LOW 108 | 109 | PUSH EAX ;HANDLE 110 | CALL SetFilePointer 111 | 112 | POPM EAX,ESI 113 | 114 | RET 115 | 116 | REOPEN_OUTPUT ENDP 117 | 118 | 119 | END 120 | 121 | -------------------------------------------------------------------------------- /ntio/reopenc.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "all.h" 5 | 6 | extern MYO_STRUCT *GET_OUTPUT_DEVICE(); 7 | extern void _err_file_list_abort(unsigned char errnum, FILE_LIST_STRUCT *ECX); 8 | 9 | 10 | /*************************** 11 | * FILE ALREADY EXISTS, JUST RESTORE POINTERS 12 | * 13 | * RETURN EAX = MYO_STRUCT 14 | */ 15 | 16 | MYO_STRUCT *REOPEN_OUTPUT(OUTFILE_STRUCT *ESI) 17 | { 18 | 19 | MYO_STRUCT* EAX = GET_OUTPUT_DEVICE(); 20 | 21 | EAX->MYO_PHYS_ADDR = ESI->_OF_PHYS_ADDR; 22 | EAX->MYO_FILE_LIST_GINDEX = ESI->_OF_FILE_LIST_GINDEX; 23 | EAX->MYO_HANDLE = ESI->_OF_HANDLE; 24 | 25 | if (ESI->_OF_HANDLE) 26 | return EAX; 27 | 28 | MYO_STRUCT* EBX = EAX; 29 | 30 | // REALLY NEED TO REOPEN IT... 31 | FILE_LIST_STRUCT *EDI = ESI->_OF_FILE_LIST_GINDEX; 32 | 33 | do 34 | { 35 | EAX = CreateFile((char *)EDI->FILE_LIST_NFN.NFN_TEXT, 36 | GENERIC_WRITE, 37 | 0, // deny all 38 | 0, // security attributes 39 | OPEN_EXISTING, 40 | FILE_FLAG_RANDOM_ACCESS, 41 | 0); // attribute file 42 | 43 | if (EAX != INVALID_HANDLE_VALUE) 44 | { 45 | EBX->MYO_HANDLE = EAX; 46 | ESI->_OF_HANDLE = EAX; 47 | 48 | SetFilePointer(EAX, // handle 49 | ESI->_OF_PHYS_ADDR, // distance low 50 | 0, // distance high 51 | FILE_BEGIN); 52 | return EAX; 53 | } 54 | } while (!_recover_handle()); 55 | 56 | _err_file_list_abort(CANT_REOPEN_ERR, EBX->MYO_FILE_LIST_GINDEX); 57 | } 58 | 59 | -------------------------------------------------------------------------------- /ntio/terrorsc.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "all.h" 5 | 6 | static ubyte TERR_FLAG; 7 | 8 | void _oerr_abort(int EAX, unsigned char *ECX) 9 | { 10 | _terr_abort(EAX, ECX); 11 | } 12 | 13 | void _terr_abort(int errnum, unsigned char *ESI) 14 | { 15 | // ESI is ASCIZ, errnum is error message # 16 | ubyte flag; 17 | _asm 18 | { 19 | mov DL,-1 20 | xchg TERR_FLAG,DL 21 | mov flag,DL 22 | } 23 | 24 | if (flag) // someone already doing thread-error-abort 25 | ExitThread(0); // just quit 26 | 27 | _capture_eax(&ERROR_SEM); // non-reentrant error handling 28 | 29 | #if 1 30 | ++_ERR_COUNT; 31 | errnum &= 0xFF; 32 | ERR_NUMBER = errnum; 33 | char *p = ERR_TABLE[errnum]; 34 | printf("%s : Error %d: %.*s \r\n", ESI, errnum, *p & 0x7F, p + 1); 35 | #else 36 | EDI = &EOUTBUF; 37 | while ((*EDI++ = *ESI++) != 0) 38 | ; 39 | EDI--; 40 | EDI[0] = ' '; 41 | EDI[1] = ':'; 42 | EDI[2] = ' '; 43 | EDI += 3; 44 | 45 | ++_ERR_COUNT; 46 | 47 | memcpy(EDI, " Error ", 7); 48 | EDI += 7; 49 | 50 | errnum &= 0xFF; 51 | 52 | ERR_NUMBER = errnum; 53 | EDI = _cbta16(errnum, EDI); 54 | 55 | EDI[0] = ':'; 56 | EDI[1] = ' '; 57 | EDI += 2; 58 | ESI = ERR_TABLE[errnum]; 59 | 60 | n = *ESI++ & 0x7F; 61 | memcpy(EDI, ESI, n); 62 | EDI += n; 63 | EDI[0] = ' '; 64 | EDI[1] = '\r'; 65 | EDI[2] = '\n'; 66 | EDI += 3; 67 | _loutall_con(EDI - &EOUTBUF, &EOUTBUF); 68 | #endif 69 | _release_eax(&ERROR_SEM); 70 | _abort(); 71 | } 72 | 73 | 74 | -------------------------------------------------------------------------------- /ntio/xcnotifyc.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "all.h" 5 | 6 | char context_msg[] = "Unexpected OPTLINK Termination at EIP=????????"; 7 | 8 | char registers_msg[] = "\ 9 | EAX=???????? EBX=???????? ECX=???????? EDX=????????\r\n\ 10 | ESI=???????? EDI=???????? EBP=???????? ESP=????????\r\n\ 11 | First=????????"; 12 | 13 | #define EAX 4 14 | #define EBX (EAX + 8 + 5) 15 | #define ECX (EBX + 8 + 5) 16 | #define EDX (ECX + 8 + 5) 17 | #define ESI (51 + 2 + 4) 18 | #define EDI (ESI + 8 + 5) 19 | #define EBP (EDI + 8 + 5) 20 | #define ESP (EBP + 8 + 5) 21 | #define FIRST (sizeof(registers_msg) - 9) 22 | 23 | int _loutall_con(unsigned nbytes, char *ptr); 24 | 25 | EXCEPTION_DISPOSITION XCNOTIFY( 26 | EXCEPTION_RECORD *exception_record, 27 | void *EstablisherFrame, 28 | CONTEXT *context, 29 | void *dispatcher_context) 30 | { 31 | static char format[] = "%p"; 32 | char *preg = registers_msg; 33 | 34 | _capture_eax(&_ABORTER_SEM); // only one thread can GP-fault 35 | if (context->ContextFlags & CONTEXT_i386) 36 | { 37 | sprintf(preg + FIRST, format, &FIRST_LABEL); 38 | 39 | if ((context->ContextFlags & ~CONTEXT_i386) & 1) 40 | { 41 | sprintf(context_msg + sizeof(context_msg) - 9, format, context->Eip); 42 | 43 | sprintf(preg + EBP, format, context->Ebp); 44 | preg[EBP + 8] = ' '; 45 | sprintf(preg + ESP, format, context->Esp); 46 | preg[ESP + 8] = ' '; 47 | } 48 | if ((context->ContextFlags & ~CONTEXT_i386) & 2) 49 | { 50 | sprintf(preg + EAX, format, context->Eax); 51 | preg[EAX + 8] = ' '; 52 | 53 | sprintf(preg + EBX, format, context->Ebx); 54 | preg[EBX + 8] = ' '; 55 | 56 | sprintf(preg + ECX, format, context->Ecx); 57 | preg[ECX + 8] = ' '; 58 | 59 | sprintf(preg + EDX, format, context->Edx); 60 | preg[EDX + 8] = ' '; 61 | 62 | sprintf(preg + ESI, format, context->Esi); 63 | preg[ESI + 8] = ' '; 64 | 65 | sprintf(preg + EDI, format, context->Edi); 66 | preg[EDI + 8] = ' '; 67 | } 68 | } 69 | #if 1 70 | _loutall_con(strlen(context_msg), context_msg); 71 | _loutall_con(1, "\n"); 72 | _loutall_con(strlen(preg), preg); 73 | _loutall_con(1, "\n"); 74 | #else 75 | MessageBox(0, preg, context_msg, MB_SETFOREGROUND | MB_ICONHAND); 76 | #endif 77 | ExitProcess(1); 78 | } 79 | 80 | 81 | -------------------------------------------------------------------------------- /optlink_vs08.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 10.00 3 | # Visual C++ Express 2008 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "optlink_vs08", "optlink_vs08.vcproj", "{199BFA3A-EBE1-4FB0-90FD-DE50ED4079AA}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Win32 = Debug|Win32 9 | Release|Win32 = Release|Win32 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {199BFA3A-EBE1-4FB0-90FD-DE50ED4079AA}.Debug|Win32.ActiveCfg = Debug|Win32 13 | {199BFA3A-EBE1-4FB0-90FD-DE50ED4079AA}.Debug|Win32.Build.0 = Debug|Win32 14 | {199BFA3A-EBE1-4FB0-90FD-DE50ED4079AA}.Release|Win32.ActiveCfg = Release|Win32 15 | {199BFA3A-EBE1-4FB0-90FD-DE50ED4079AA}.Release|Win32.Build.0 = Release|Win32 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /os2link/2go.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/os2link/2go.txt -------------------------------------------------------------------------------- /os2link/build.bat: -------------------------------------------------------------------------------- 1 | nmake 2 | -------------------------------------------------------------------------------- /os2link/db.bat: -------------------------------------------------------------------------------- 1 | mode co80 2 | OPTDEBUG -E -43 \NPROJ\OS2LINK\OBJ\FIRST slr ..\common\obj\lnkinit ..\common\obj\lnkdat,obj\slr,obj\slr,x32v; 3 | -------------------------------------------------------------------------------- /os2link/domaps.bat: -------------------------------------------------------------------------------- 1 | pkz -a maps\%1 obj\slr.map objnt\linkd.map objdll\linkndd.map 2 | 3 | -------------------------------------------------------------------------------- /os2link/fv.cfg: -------------------------------------------------------------------------------- 1 | FV02XXM+C:\P386\OS2LINK 2 | O1ppO10(O('0(O0(0'tt(O0(tt'00(O0(0C00OWW?O07(O0((O0(WW(O0('00(O0(0(O0((O0(pp%3ppppppOpp<GG -------------------------------------------------------------------------------- /os2link/go.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | NMAKE OS2LINK.MAK HOST_DOSX= 3 | CD\APPLOAD 4 | CD\P386\OS2LINK 5 | CD..\CV 6 | CD..\EXE 7 | CD..\COMMON 8 | CD..\SUBS 9 | CD..\MOVES 10 | CD..\ALLOC 11 | CD..\PARSE 12 | CD..\INSTALL 13 | CD..\DOSIO 14 | CD..\OVERLAYS 15 | CD..\OS2LINK 16 | 17 | 18 | CALL L.BAT 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /os2link/godll.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | COPY RELEASE ..\COMMON 3 | NMAKE OS2LINK.MAK HOST_WIN32DLL= 4 | IF ERRORLEVEL 1 GOTO END 5 | CD..\DLLSTUFF 6 | CALL GO.BAT HOST_WIN32DLL 7 | IF ERRORLEVEL 1 GOTO END 8 | CD..\CV 9 | CALL GO.BAT HOST_WIN32DLL 10 | IF ERRORLEVEL 1 GOTO END 11 | CD..\EXE 12 | CALL GO.BAT HOST_WIN32DLL 13 | IF ERRORLEVEL 1 GOTO END 14 | CD..\COMMON 15 | CALL GO.BAT HOST_WIN32DLL 16 | IF ERRORLEVEL 1 GOTO END 17 | CD..\SUBS 18 | CALL GO.BAT HOST_WIN32DLL 19 | IF ERRORLEVEL 1 GOTO END 20 | CD..\MOVES 21 | CALL GO.BAT HOST_WIN32DLL 22 | IF ERRORLEVEL 1 GOTO END 23 | CD..\ALLOC 24 | CALL GO.BAT HOST_WIN32DLL 25 | IF ERRORLEVEL 1 GOTO END 26 | CD..\PARSE 27 | CALL GO.BAT HOST_WIN32DLL 28 | IF ERRORLEVEL 1 GOTO END 29 | CD..\INSTALL 30 | CALL GO.BAT HOST_WIN32DLL 31 | IF ERRORLEVEL 1 GOTO END 32 | CD..\NTIO 33 | CALL GO.BAT HOST_WIN32DLL 34 | IF ERRORLEVEL 1 GOTO END 35 | CD..\OVERLAYS 36 | CALL GO.BAT HOST_WIN32DLL 37 | IF ERRORLEVEL 1 GOTO END 38 | CD..\OS2LINK 39 | CALL LWINDLL.BAT 40 | 41 | :END 42 | CD..\OS2LINK 43 | 44 | 45 | -------------------------------------------------------------------------------- /os2link/gowin.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | COPY RELEASE ..\COMMON 3 | NMAKE OS2LINK.MAK HOST_WIN32=WIN32 4 | IF ERRORLEVEL 1 GOTO END 5 | CD..\CV 6 | CALL GO.BAT HOST_WIN32 7 | IF ERRORLEVEL 1 GOTO END 8 | CD..\EXE 9 | CALL GO.BAT HOST_WIN32 10 | IF ERRORLEVEL 1 GOTO END 11 | CD..\COMMON 12 | CALL GO.BAT HOST_WIN32 13 | IF ERRORLEVEL 1 GOTO END 14 | CD..\SUBS 15 | CALL GO.BAT HOST_WIN32 16 | IF ERRORLEVEL 1 GOTO END 17 | CD..\MOVES 18 | CALL GO.BAT HOST_WIN32 19 | IF ERRORLEVEL 1 GOTO END 20 | CD..\ALLOC 21 | CALL GO.BAT HOST_WIN32 22 | IF ERRORLEVEL 1 GOTO END 23 | CD..\PARSE 24 | CALL GO.BAT HOST_WIN32 25 | IF ERRORLEVEL 1 GOTO END 26 | CD..\INSTALL 27 | CALL GO.BAT HOST_WIN32 28 | IF ERRORLEVEL 1 GOTO END 29 | CD..\NTIO 30 | CALL GO.BAT HOST_WIN32 31 | IF ERRORLEVEL 1 GOTO END 32 | CD..\OVERLAYS 33 | CALL GO.BAT HOST_WIN32 34 | IF ERRORLEVEL 1 GOTO END 35 | CD..\OS2LINK 36 | CALL LWIN32.BAT 37 | 38 | :END 39 | CD..\OS2LINK 40 | 41 | 42 | -------------------------------------------------------------------------------- /os2link/help: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /os2link/install.bat: -------------------------------------------------------------------------------- 1 | cd .. 2 | install 3 | -------------------------------------------------------------------------------- /os2link/l.bat: -------------------------------------------------------------------------------- 1 | CD OBJ 2 | \SC\BIN\LINK /SILENT /NOI /NODEBUGLOCALS @..\slr 3 | CD.. 4 | \SC\BIN\LINK /SILENT /NOI @SLR3 5 | 6 | -------------------------------------------------------------------------------- /os2link/launch.bat: -------------------------------------------------------------------------------- 1 | @echo on 2 | @TITLE BUILDING - %* 3 | %* 4 | @if %errorlevel% EQU 0 exit 5 | @TITLE BUILD FAIL - %* 6 | -------------------------------------------------------------------------------- /os2link/linknd.din: -------------------------------------------------------------------------------- 1 | EXPORTS 2 | "_LinkVersion"="DllVersion" 3 | "_LinkEntry"="DLL_ENTRY" 4 | "_NetSpawnVersion"="NetSpawnVersion" 5 | -------------------------------------------------------------------------------- /os2link/lwin32.bat: -------------------------------------------------------------------------------- 1 | CD OBJNT 2 | \sc\BIN\LINK /SILENT /NOI /NOERROR @..\slrNT 3 | CD.. 4 | \sc\BIN\LINK /SILENT /NOI /NOERROR @SLRNT3 5 | 6 | -------------------------------------------------------------------------------- /os2link/lwindll.bat: -------------------------------------------------------------------------------- 1 | CD OBJDLL 2 | \SC\BIN\LINK /SILENT /NOI /NOERROR @..\slrDLL 3 | CD.. 4 | \SC\BIN\LINK /SILENT /NOI /NOERROR /IMPL/IMPD @SLR3DLL 5 | 6 | -------------------------------------------------------------------------------- /os2link/makefile: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | default : ..\COMMON\RELEASE nt 5 | 6 | 7 | ..\COMMON\RELEASE : RELEASE 8 | copy RELEASE ..\COMMON 9 | 10 | nt : 11 | nmake -nologo -f optdll.mak HOST_WIN32=1 12 | 13 | -------------------------------------------------------------------------------- /os2link/mdgo.bat: -------------------------------------------------------------------------------- 1 | MD \P386\CV\OBJDLL 2 | MD \P386\CV\LSTDLL 3 | MD \P386\EXE\OBJDLL 4 | MD \P386\EXE\LSTDLL 5 | MD \P386\COMMON\OBJDLL 6 | MD \P386\COMMON\LSTDLL 7 | MD \P386\SUBS\OBJDLL 8 | MD \P386\SUBS\LSTDLL 9 | MD \P386\MOVES\OBJDLL 10 | MD \P386\MOVES\LSTDLL 11 | MD \P386\ALLOC\OBJDLL 12 | MD \P386\ALLOC\LSTDLL 13 | MD \P386\PARSE\OBJDLL 14 | MD \P386\PARSE\LSTDLL 15 | MD \P386\INSTALL\OBJDLL 16 | MD \P386\INSTALL\LSTDLL 17 | MD \P386\DOSIO\OBJDLL 18 | MD \P386\DOSIO\LSTDLL 19 | MD \P386\OVERLAYS\OBJDLL 20 | MD \P386\OVERLAYS\LSTDLL 21 | 22 | 23 | -------------------------------------------------------------------------------- /os2link/objnt/link.def: -------------------------------------------------------------------------------- 1 | NAME LINK.EXE BASE 0X400000 2 | 3 | STACKSIZE 0X100000 4 | HEAPSIZE 0X100000 5 | 6 | CODE EXECUTE READ SHARED 7 | DATA READ WRITE 8 | 9 | SEGMENTS 10 | _TEXT 11 | ICODE CLASS 'ICODE' 12 | 13 | CONST CLASS 'CONST' READ SHARED 14 | 15 | BEG_DATA CLASS 'DATABEG' READ WRITE NONSHARED 16 | _DATA CLASS 'DATA' READ WRITE NONSHARED 17 | END_DATA CLASS 'DATAEND' READ WRITE NONSHARED 18 | 19 | BEG_BSS CLASS 'BSSBEG' READ WRITE NONSHARED 20 | _BSS CLASS 'BSS' READ WRITE NONSHARED 21 | END_BSS CLASS 'BSSEND' READ WRITE NONSHARED 22 | 23 | -------------------------------------------------------------------------------- /os2link/optdll.mak: -------------------------------------------------------------------------------- 1 | 2 | LIBS= CV EXE COMMON SUBS MOVES ALLOC PARSE INSTALL OVERLAYS NTIO KERNEL32 USER32 3 | DIRS= OS2LINK CV EXE COMMON SUBS MOVES ALLOC PARSE INSTALL OVERLAYS 4 | 5 | !IFNDEF DM 6 | DM = \dm 7 | !ENDIF 8 | LINKCMD = $(DM)\bin\linkold /SILENT /NOI /NOERROR 9 | 10 | !IFDEF HOST_WIN32 11 | 12 | DIRS = NTIO $(DIRS) 13 | 14 | EXT = NT 15 | MASMFLAGS = /DHOS=W32 16 | MAKECMD = HOST_WIN32= 17 | LINKCMD1 = $(LINKCMD) @..\slrNT 18 | LINKCMD2 = $(LINKCMD) @.\slrnt3 19 | 20 | !ENDIF 21 | 22 | LST = .\LST$(EXT) 23 | OBJ = .\OBJ$(EXT) 24 | LIBd = ..\LIB$(EXT) 25 | LIB = $(LIB);$(LIBd) 26 | 27 | 28 | default : $(DIRS) OS2LNK 29 | 30 | OPTLINK: $(DIRS) 31 | cd ..\OS2LINK 32 | $(DM)\bin\link $(OBJ)\* ..\appload\slrload,$(OBJ)\link.exe,$(OBJ)\link.map,..\LIBNT\ $(LIBS)/CO/MAP/DET/XREF/NOI/EXETYPE:NT; 33 | # link does not work with multiple processors, so we set the affinity to 1 34 | # imagecfg is available here: http://www.robpol86.com/index.php/ImageCFG 35 | # imagecfg always has exit code 1 36 | -imagecfg -a 0x1 $(OBJ)\link.exe 37 | 38 | $(DIRS) : 39 | @echo on 40 | cd ..\$@ 41 | @if not exist $(LST) md $(LST) 42 | @if not exist $(OBJ) md $(OBJ) 43 | @if not exist $(LIBd) md $(LIBd) 44 | nmake -nologo -f $@.MAK $(MAKECMD) 45 | 46 | OS2LNK : 47 | @echo on 48 | cd ..\OS2LINK 49 | @if not exist .\OBJ$(EXT) mkdir .\OBJ$(EXT) 50 | cd OBJ$(EXT) 51 | !IFDEF HOST_WIN32 52 | copy ..\OBJ\LNKX.EXE>nul 53 | !ENDIF 54 | $(LINKCMD1) 55 | cd .. 56 | !IFDEF HOST_WIN32 57 | copy .\OBJ\LNKX.EXE>nul 58 | !ENDIF 59 | $(LINKCMD2) 60 | 61 | -------------------------------------------------------------------------------- /os2link/optlinks.cfg: -------------------------------------------------------------------------------- 1 | /INFO 2 | /nthost 3 | -------------------------------------------------------------------------------- /os2link/perform.doc: -------------------------------------------------------------------------------- 1 | Notes on possible optimizations: 2 | 3 | 1. Put Environment strings into a hash table 4 | 5 | 2. Localized hashes like cv4 symbol table 6 | 7 | 3. HASH without divide 8 | 9 | 4. use shift instead of mult in newlib 10 | 11 | -------------------------------------------------------------------------------- /os2link/relnotes.txt: -------------------------------------------------------------------------------- 1 | 750.6 09-10-97 Expand implib directory maximum blocks from 1021 to 2039 2 | 3 | 750.5 07-10-97 Fix register clobbered by STORE_XREF_ENTRY 4 | 5 | 750.4 06-16-97 Fix boundary bug in external symbol handling 6 | 7 | 750.3 03-18-97 Create dynamic library if .dll extension specified for output file 8 | 9 | 750B2 02-06-97 Change /CO:5 signature to JTR1 10 | 11 | 750B1 01-02-97 Update version for 7.5. 12 | 13 | 722B15 12-13-96 Avoid Win95 boundary bug 14 | 15 | 722B14 08-27-96 Zero codeview source hash collision field before 16 | using as a line count. 17 | 18 | 722B13 08-11-96 Fix resource string compare 19 | 20 | 722B12 06-25-96 Fix long library symbol bug 21 | 22 | 722B11 06-18-96 Add align type 7: 32 byte 23 | 24 | 722B10 06-11-96 Fix gpf associated with initializing cv import info 25 | 26 | 722B9 03-21-96 Fix stack frame allocation bug introduced in 722B8 27 | Fix gpf associated with attempting to link objects 28 | with no code or data. 29 | 30 | 722B8 03-05-96 Increase maximum symbol length from 468 to 8192. 31 | Note that the maximum symbol length for OMF 32 | libraries remains 468. Fix associated error message 33 | and update copyright to 1996. 34 | 35 | 722B7 02-17-96 Fix /PACKFUNCTIONS recursion problem 36 | 37 | 722B6 12-29-95 New CV info format for TDB /CO:5 initial support 38 | 39 | 722B5 12-21-95 Handle CV type records >16K. Restore current module 40 | variable before issuing error message while processing 41 | unresolved externals. 42 | 43 | 722B4 12-13-95 Specify filename, line number (column number if dll) 44 | on errors associated with parsing the .DEF file. 45 | 46 | 722B3 12-12-95 Drop imports into SSTGLOBALPUB CV4 table. 47 | 48 | 722B2 12-04-95 Suport COFF import library generation switch: 49 | /IMPLIBCOFF[:filename] 50 | 51 | 722B1 11-11-95 Fixed a few bugs related to >4095 modules in a library. 52 | Fixed a bug with spurious TLS generation (flag in 53 | released memory...). Modified memory allocation stuff 54 | to release back to os sooner. Also grabs smaller 55 | chunks from os. 56 | 57 | 721b1 10-19-95 /entry is now a fuzzy-matched guy. This requires an 58 | IDDE change as some of the /entries currently passed 59 | don't work. 60 | 61 | -------------------------------------------------------------------------------- /os2link/setlib.bat: -------------------------------------------------------------------------------- 1 | SET LIB=\SC\LIB;\P386\LIB;\X32\LIB -------------------------------------------------------------------------------- /os2link/setlibdll.bat: -------------------------------------------------------------------------------- 1 | SET LIB=\SC\LIB;\P386\LIBDLL;\X32\LIB -------------------------------------------------------------------------------- /os2link/setlibnt.bat: -------------------------------------------------------------------------------- 1 | SET LIB=\SC\LIB;\P386\LIBNT;\X32\LIB -------------------------------------------------------------------------------- /os2link/slr: -------------------------------------------------------------------------------- 1 | SLR FIRST *,slr/CO/MAP/DET/XREF,slr,..\..\LIB\ x32v COMMON ALLOC SUBS PARSE DOSIO INSTALL MOVES OVERLAYS EXE CV SLRLOAD; 2 | -------------------------------------------------------------------------------- /os2link/slr1: -------------------------------------------------------------------------------- 1 | SLR OBJ\FIRST OBJ\*,obj\slr1/MAP/DET/XREF/LI/CO/NOI,OBJ\SLR1,X32V COMMON ALLOC SUBS PARSE DOSIO INSTALL MOVES OVERLAYS EXE CV ..\LIB\ ; 2 | 3 | -------------------------------------------------------------------------------- /os2link/slr2: -------------------------------------------------------------------------------- 1 | SLR OBJ\FIRST OBJ\*,obj\SLR2/MAP/DET/XREF/LI/CO/NOI,obj\SLR2,X32V COMMON ALLOC SUBS PARSE DOSIO INSTALL MOVES OVERLAYS EXE CV ..\LIB\ ; 2 | 3 | -------------------------------------------------------------------------------- /os2link/slr3: -------------------------------------------------------------------------------- 1 | SLR OBJ\FIRST OBJ\*,OBJ\LNKX /NOI,OBJ\,X32V COMMON ALLOC SUBS PARSE DOSIO INSTALL MOVES OVERLAYS EXE CV ..\LIB\ SLRLOAD; 2 | 3 | -------------------------------------------------------------------------------- /os2link/slr3dll: -------------------------------------------------------------------------------- 1 | OBJDLL\FIRST OBJDLL\*,objDLL\LINKND/NOI/EXETYPE:NT,OBJDLL\,..\LIBDLL\ COMMON ALLOC SUBS PARSE INSTALL MOVES OVERLAYS EXE CV NTIO DLLSTUFF KERNEL32 USER32 SLRLOAD,OBJDLL\LINKDLL; 2 | 3 | -------------------------------------------------------------------------------- /os2link/slrdll: -------------------------------------------------------------------------------- 1 | FIRST *,LINKNDD/CO/MAP/DET/XREF/EXETYPE:NT,,..\..\LIBDLL\ COMMON ALLOC SUBS PARSE INSTALL MOVES OVERLAYS EXE CV NTIO DLLSTUFF KERNEL32 USER32 SLRLOAD,LINKDLL; 2 | -------------------------------------------------------------------------------- /os2link/slrnt: -------------------------------------------------------------------------------- 1 | FIRST *,LINKD/CO/MAP/DET/XREF/NOI/EXETYPE:NT,, ..\..\LIBNT\ COMMON ALLOC SUBS PARSE INSTALL MOVES OVERLAYS EXE CV NTIO KERNEL32 USER32 SLRLOAD,LINK; 2 | -------------------------------------------------------------------------------- /os2link/slrnt1: -------------------------------------------------------------------------------- 1 | FIRST *,LINKD1/CO/MAP/DET/XREF/EXETYPE:NT,,..\..\LIBNT\ COMMON ALLOC SUBS PARSE INSTALL MOVES OVERLAYS EXE CV NTIO KERNEL32,LINK; 2 | -------------------------------------------------------------------------------- /os2link/slrnt3: -------------------------------------------------------------------------------- 1 | OBJNT\FIRST OBJNT\*,objNT\LINK/NOI/EXETYPE:NT,OBJNT\,..\LIBNT\ COMMON ALLOC SUBS PARSE INSTALL MOVES OVERLAYS EXE CV NTIO KERNEL32 USER32 SLRLOAD,OBJNT\LINK; 2 | 3 | -------------------------------------------------------------------------------- /os2link/src/prolog.asm: -------------------------------------------------------------------------------- 1 | TITLE PROLOG - 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC PERFORM_VERIFY 6 | 7 | .DATA 8 | 9 | SOFT EXTB SYMBOL_TPTR 10 | 11 | SOFT EXTW SYMBOL_LENGTH 12 | 13 | SOFT EXTCA OPTI_MOVE 14 | 15 | .CODE MIDDLE_TEXT 16 | 17 | SOFT EXTP FAR_INSTALL,SEARCH_RAINBOW_AXBX,ERR_ABORT,LNAME_INSTALL 18 | 19 | SOFT EXTA CANNOT_LINK_ERR 20 | 21 | ASSUME DS:NOTHING 22 | 23 | PERFORM_VERIFY PROC 24 | ; 25 | ;LOOK FOR CLASSES OF PROSYMB, PROMOD 26 | ; 27 | ;ALSO SYMBOL _PROLOG_SymbolTable MUST BE DEFINED 28 | ; 29 | LEA SI,PROSYMB 30 | CALL VERIFY_CLASS 31 | LEA SI,PROMOD 32 | CALL VERIFY_CLASS 33 | LEA SI,_PROLOG_SymbolTable 34 | CALL VERIFY_SYMBOL 35 | RET 36 | 37 | PERFORM_VERIFY ENDP 38 | 39 | VERIFY_CLASS PROC NEAR 40 | ; 41 | ; 42 | ; 43 | PUSH CS 44 | POP DS 45 | CALL UNXOR 46 | FIXES 47 | GET_NAME_HASH 48 | CALL LNAME_INSTALL 49 | ; MOV CX,RECTYP_CLASS 50 | CALL SEARCH_RAINBOW_AXBX 51 | JC VERIFY_FAIL 52 | RET 53 | 54 | VERIFY_CLASS ENDP 55 | 56 | VERIFY_FAIL: 57 | MOV CL,CANNOT_LINK_ERR 58 | CALL ERR_ABORT 59 | 60 | VERIFY_SYMBOL PROC NEAR 61 | ; 62 | ; 63 | ; 64 | PUSH CS 65 | POP DS 66 | CALL UNXOR 67 | FIXES 68 | GET_NAME_HASH 69 | CALL FAR_INSTALL 70 | JNC VERIFY_FAIL 71 | RET 72 | 73 | VERIFY_SYMBOL ENDP 74 | 75 | UNXOR PROC NEAR 76 | ; 77 | ; 78 | ; 79 | PUSH SI 80 | MOV AH,0AAH 81 | XOR BPTR [SI],AH 82 | LODSB 83 | MOV CL,AL 84 | XOR CH,CH 85 | 1$: 86 | XOR BPTR [SI],AH 87 | INC SI 88 | LOOP 1$ 89 | POP SI 90 | RET 91 | 92 | UNXOR ENDP 93 | 94 | GENSTRING MACRO XX 95 | LOCAL LEN 96 | 97 | XX DB LEN XOR 0AAH 98 | IRPC XXX, 99 | DB '&XXX' XOR 0AAH 100 | ENDM 101 | 102 | LEN EQU $-1-XX 103 | 104 | ENDM 105 | 106 | GENSTRING PROSYMB 107 | GENSTRING PROMOD 108 | GENSTRING _PROLOG_SymbolTable 109 | 110 | END 111 | 112 | -------------------------------------------------------------------------------- /os2link/src/realpers.asm: -------------------------------------------------------------------------------- 1 | 2 | INCLUDE MACROS 3 | 4 | .CODE STARTUP_TEXT 5 | 6 | PUBLIC PERSONALITY 7 | 8 | PERSONALITY PROC 9 | 10 | SETT LIB_NOT_FOUND_FATAL 11 | RET 12 | 13 | PERSONALITY ENDP 14 | 15 | END 16 | 17 | -------------------------------------------------------------------------------- /os2link/src/tsymc.asm: -------------------------------------------------------------------------------- 1 | PUBLIC __aclkfsc,__asepfsc 2 | 3 | .MODEL SMALL 4 | 5 | .CODE 6 | 7 | __aclkfsc: NOP 8 | NOP 9 | NOP 10 | __asepfsc: 11 | NOP 12 | NOP 13 | NOP 14 | 15 | END __asepfsc 16 | 17 | -------------------------------------------------------------------------------- /os2link/try.bat: -------------------------------------------------------------------------------- 1 | CD\SC\SAMPLES\WIN32\FRACTAL 2 | \P386\OS2LINK\OBJNT\LINK32 /CO /ENTRY:_WinMainCRTStartup /RC :STHRASH.RES @SEG32.LNK; 3 | 4 | -------------------------------------------------------------------------------- /os2link/x.def: -------------------------------------------------------------------------------- 1 | NAME STEVE 2 | NAME STEVE 3 | LIBRARY STEVE 4 | APPLOADER '__MYLOADER' 5 | 6 | CODE PRELOAD 7 | REALMODE 8 | PROTMODE 9 | CODECLASSES FRED 10 | SEGMENTS _TEXT 11 | FIRST_TEXT 12 | 13 | FUNCTIONS 14 | F1 15 | F2 16 | F3 17 | F4 18 | 19 | EXETYPE DOSX 20 | 21 | -------------------------------------------------------------------------------- /overlays/aslrovl.asm: -------------------------------------------------------------------------------- 1 | TITLE ASLROVL 2 | 3 | INCLUDE MACROS 4 | 5 | if any_overlays 6 | 7 | PUBLIC ADD_SLROVL_TO_LIST 8 | 9 | .CODE PASS1_TEXT 10 | 11 | SOFT EXTP LIB_ROUTINE_FINAL 12 | 13 | ASSUME DS:NOTHING 14 | 15 | ADD_SLROVL_TO_LIST PROC 16 | ; 17 | ;IF DOING OVERLAYS, AND NOT ALREADY DONE, ADD SLROVL.LIB TO 18 | ;LIBRARY LIST. 19 | ; 20 | BITT DOING_OVERLAYS 21 | JZ 9$ 22 | BITT SLROVL_ADDED 23 | JNZ 9$ 24 | ; 25 | ;TREAT LIKE COMENT RECORD... 26 | ; 27 | SETT SLROVL_ADDED 28 | FIXDS 29 | FIXES 30 | LEA SI,SLROVL_COMENT 31 | CALL LIB_ROUTINE_FINAL 32 | CLC 33 | RET 34 | 35 | 9$: 36 | STC 37 | RET 38 | 39 | ADD_SLROVL_TO_LIST ENDP 40 | 41 | .DATA 42 | 43 | if fg_plink 44 | DW 7 45 | SLROVL_COMENT DB 'SLROVL',0DH,1AH 46 | else 47 | DW 8 48 | SLROVL_COMENT DB 'OPTCOMP',0DH,1AH 49 | endif 50 | 51 | endif 52 | 53 | END 54 | 55 | -------------------------------------------------------------------------------- /overlays/go.bat: -------------------------------------------------------------------------------- 1 | NMAKE OVERLAYS.MAK %1= 2 | 3 | -------------------------------------------------------------------------------- /overlays/link: -------------------------------------------------------------------------------- 1 | OBJ\DECLSEGS.OBJ DECLSEGS.ASM ..\COMMON\MACROS ..\COMMON\SECTS 2 | DECLSEGS,OBJ\/zi; 3 | 4 | OBJ\GENSTUFF.OBJ GENSTUFF.ASM ..\COMMON\MACROS ..\COMMON\IO_STRUC ..\COMMON\SECTS ..\COMMON\SECTIONS 5 | GENSTUFF,OBJ\/zi; 6 | 7 | OBJ\ALLOSECT.OBJ ALLOSECT.ASM ..\COMMON\MACROS ..\COMMON\SEGMENTS ..\COMMON\MODULES ..\COMMON\CLASSES ..\COMMON\SECTIONS 8 | ALLOSECT,OBJ\/zi; 9 | 10 | OBJ\ALLOVTBL.OBJ ALLOVTBL.ASM ..\COMMON\MACROS 11 | ALLOVTBL,OBJ\/zi; 12 | 13 | OBJ\SIZESEGS.OBJ SIZESEGS.ASM ..\COMMON\MACROS ..\COMMON\SECTS 14 | SIZESEGS,OBJ\/zi; 15 | 16 | OBJ\ALLOCATE.OBJ ALLOCATE.ASM ..\COMMON\MACROS 17 | ALLOCATE,OBJ\/zi; 18 | 19 | OBJ\ASLROVL.OBJ ASLROVL.ASM ..\COMMON\MACROS 20 | ASLROVL,OBJ\/zi; 21 | 22 | OBJ\PERSONAL.OBJ PERSONAL.ASM ..\COMMON\MACROS 23 | PERSONAL,OBJ\/ZI; 24 | 25 | -------------------------------------------------------------------------------- /overlays/overlays.mak: -------------------------------------------------------------------------------- 1 | !INCLUDE ..\COMMON\MAKEMACS 2 | 3 | 4 | FLAGS = $(MASMFLAGS) 5 | SRC = $(BASE)\OVERLAYS 6 | 7 | 8 | ALL : $(LIB)\OVERLAYS.LIB 9 | 10 | $(LIB)\OVERLAYS.LIB : $(OBJ)\ALLOSECT.OBJ $(OBJ)\GENSTUFF.OBJ 11 | $(BUILD_LIB) 12 | 13 | $(OBJ)\ALLOSECT.OBJ : ALLOSECT.ASM ..\COMMON\MACROS ..\COMMON\SEGMENTS ..\COMMON\MODULES ..\COMMON\CLASSES ..\COMMON\SECTIONS 14 | ML $(FLAGS) $(SRC)\ALLOSECT.ASM 15 | 16 | $(OBJ)\GENSTUFF.OBJ : GENSTUFF.ASM ..\COMMON\MACROS ..\COMMON\SECTS ..\COMMON\IO_STRUC ..\COMMON\SECTIONS 17 | ML $(FLAGS) $(SRC)\GENSTUFF.ASM 18 | 19 | 20 | -------------------------------------------------------------------------------- /overlays/personal.asm: -------------------------------------------------------------------------------- 1 | TITLE PERSONAL 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC PERSONALITY 6 | 7 | .CODE STARTUP_TEXT 8 | 9 | ASSUME DS:NOTHING 10 | 11 | PERSONALITY PROC 12 | ; 13 | ; 14 | ; 15 | RET 16 | 17 | PERSONALITY ENDP 18 | 19 | END 20 | 21 | -------------------------------------------------------------------------------- /overlays/sizesegs.asm: -------------------------------------------------------------------------------- 1 | TITLE SIZESEGS - Copyright (c) SLR Systems 1991 2 | 3 | INCLUDE MACROS 4 | INCLUDE SECTS 5 | 6 | if any_overlays 7 | 8 | PUBLIC SIZE_OVERLAY_SEGMENTS 9 | 10 | .DATA 11 | 12 | SOFT EXTB MODEL_FAR_BYTE,TRACK_BYTE,RELOAD_BYTE 13 | 14 | SOFT EXTW VECTOR_COUNT,VECTOR_SIZE,SECTION_NUMBER,SECTION_SIZE,RELOAD_DEPTH,OUTFILE_NUMBER 15 | 16 | SOFT EXTD SLR_VECTORS,SLR_SECTIONS,SLR_RELOAD_STACK,SLR_CODE,SLR_FNAMES 17 | 18 | .CODE MIDDLE_TEXT 19 | 20 | ASSUME DS:NOTHING 21 | 22 | SIZE_OVERLAY_SEGMENTS PROC 23 | ; 24 | ;DECLARE SIZES OF OVERLAY SEGMENTS BASED ON QUANTITIES KNOWN 25 | ;AT THIS TIME 26 | ; 27 | LDS SI,SLR_VECTORS 28 | SYM_CONV_DS 29 | MOV AX,VECTOR_COUNT 30 | MUL VECTOR_SIZE ;SIZE OF VECTORS 31 | ; 32 | ;PLUS 5 BYTES FOR A FAR JUMP IF NEAR MODEL WITH RELOAD OR TRACK 33 | ; 34 | CMP MODEL_FAR_BYTE,'Y' 35 | JZ 1$ 36 | CMP TRACK_BYTE,'Y' 37 | JZ 11$ 38 | CMP RELOAD_BYTE,'Y' 39 | JNZ 1$ 40 | 11$: 41 | ADD AX,5 ;THIS IS A FAR JUMP TO RELOAD CODE? 42 | ADC DX,0 43 | 1$: 44 | MOV [SI]._SM_LEN.LW,AX 45 | MOV [SI]._SM_LEN.HW,DX 46 | 47 | LDS SI,SLR_SECTIONS 48 | SYM_CONV_DS 49 | MOV AX,SECTION_NUMBER 50 | MUL SECTION_SIZE ;VARIABLE, SIZE OF SECTION 51 | MOV [SI]._SM_LEN.LW,AX 52 | MOV [SI]._SM_LEN.HW,DX 53 | 54 | LDS SI,SLR_RELOAD_STACK 55 | MOV CX,DS 56 | JCXZ 5$ 57 | SYM_CONV_DS 58 | MOV AX,6 59 | CMP MODEL_FAR_BYTE,'Y' 60 | JZ 3$ 61 | MOV AL,4 ;ONLY 4 BYTES PER IF NEAR CALLS... 62 | 3$: 63 | MUL RELOAD_DEPTH 64 | MOV [SI]._SM_LEN.LW,AX 65 | MOV [SI]._SM_LEN.HW,DX 66 | 5$: 67 | LDS SI,SLR_FNAMES 68 | SYM_CONV_DS 69 | MOV AX,FNAME_SIZE 70 | MUL OUTFILE_NUMBER 71 | ; ADD AX,SIZE SLRCODE_STRUCT 72 | ; ADC DX,0 73 | MOV [SI]._SM_LEN.LW,AX 74 | MOV [SI]._SM_LEN.HW,DX 75 | 76 | RET 77 | 78 | SIZE_OVERLAY_SEGMENTS ENDP 79 | 80 | endif 81 | 82 | END 83 | 84 | -------------------------------------------------------------------------------- /parse/chknul.asm: -------------------------------------------------------------------------------- 1 | TITLE CHKNUL - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | PUBLIC CHECK_NUL,CHECK_NUL1 7 | 8 | 9 | .CODE PHASE1_TEXT 10 | 11 | 12 | ASSUME EAX:PTR NFN_STRUCT 13 | ; returns void 14 | CHECK_NUL PROC 15 | ; 16 | ;SEE IF [EAX] IS NUL DEVICE..., SET FLAG IF SO... 17 | ; 18 | CMP [EAX].NFN_PRIMLEN,0 19 | JZ L8$ 20 | if 0;fgh_os2 21 | CMP [EAX].NFN_EXTLEN,2 22 | JAE L9$ 23 | endif 24 | CALL CHECK_NUL1 25 | JNZ L9$ 26 | L8$: 27 | OR [EAX].NFN_FLAGS,MASK NFN_NUL 28 | L9$: 29 | RET 30 | 31 | CHECK_NUL ENDP 32 | 33 | 34 | ; returns Z if NUL 35 | CHECK_NUL1 PROC 36 | ; 37 | ;SEE IF [EAX] PRIMARY NAME IS 'NUL' 38 | ;RETURNS EAX INTACT 39 | ; 40 | MOV EDX,[EAX].NFN_PRIMLEN 41 | MOV ECX,[EAX].NFN_PATHLEN 42 | 43 | CMP EDX,3 44 | JNZ L9$ 45 | 46 | LEA ECX,[ECX+EAX].NFN_TEXT+1 47 | PUSH EAX 48 | 49 | MOV AL,[ECX-1] 50 | TO_UPPER 51 | CMP AL,'N' 52 | JNZ L2$ 53 | MOV AL,[ECX] 54 | INC ECX 55 | TO_UPPER 56 | CMP AL,'U' 57 | JNZ L2$ 58 | MOV AL,[ECX] 59 | INC ECX 60 | TO_UPPER 61 | CMP AL,'L' 62 | L2$: 63 | POP EAX 64 | L9$: 65 | RET 66 | 67 | CHECK_NUL1 ENDP 68 | 69 | END 70 | 71 | -------------------------------------------------------------------------------- /parse/chknulc.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | void _check_nul(NFN_STRUCT* EAX) 5 | { 6 | // SEE IF [EAX] IS NUL DEVICE..., SET FLAG IF SO... 7 | 8 | if (EAX->NFN_PRIMLEN == 0 || _check_nul1(EAX)) 9 | EAX->NFN_FLAGS |= NFN_NUL; 10 | } 11 | 12 | // Return true if [EAX] primary name is 'NUL' 13 | int _check_nul1(NFN_STRUCT* EAX) 14 | { 15 | // SEE IF [EAX] PRIMARY NAME IS 'NUL' 16 | 17 | // RETURNS EAX INTACT 18 | if (EAX->NFN_PRIMLEN != 3) 19 | return 0; 20 | 21 | unsigned char *p = &EAX->NFN_TEXT[EAX->NFN_PATHLEN]; 22 | return (p[0] == 'N' || p[0] == 'n') && 23 | (p[1] == 'U' || p[1] == 'u') && 24 | (p[2] == 'L' || p[2] == 'l'); 25 | } 26 | 27 | -------------------------------------------------------------------------------- /parse/do_fnc.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | extern unsigned char FNTBL[256]; 5 | 6 | NFN_STRUCT* _do_defaults(NFN_STRUCT* ESI, CMDLINE_STRUCT* EDI); 7 | 8 | NFN_STRUCT* _do_filename(NFN_STRUCT* ECX, CMDLINE_STRUCT* EAX) 9 | { 10 | // EAX IS FILESTUFF_PTR 11 | 12 | _parse_filename(ECX); 13 | 14 | // DEAL WITH DEFAULTS 15 | return _do_defaults(ECX, EAX); 16 | } 17 | 18 | NFN_STRUCT* _do_defaults(NFN_STRUCT* ESI, CMDLINE_STRUCT* EDI) 19 | { 20 | if (!(ESI->NFN_FLAGS & NFN_PRIM_SPECIFIED)) 21 | { 22 | // NO PRIMARY FILENAME, MOVE EITHER NUL OR SRC... 23 | 24 | if ((*EDI->CMD_SELECTED)() || // WANT IT, MOVE SOURCE NAME 25 | // OK, IF PATH OR EXTENTION SPECIFIED, MOVE SOURCE TOO 26 | ESI->NFN_FLAGS & (NFN_PATH_SPECIFIED | NFN_EXT_SPECIFIED)) 27 | { 28 | _move_srcprim_to_eax(ESI); 29 | } 30 | } 31 | 32 | if (!(ESI->NFN_FLAGS & NFN_EXT_SPECIFIED)) 33 | { 34 | // MOVE DEFAULT EXTENT (UNLESS PRIMARY IS NUL) 35 | if (!_check_nul1(ESI)) 36 | { 37 | // MOVE DEFAULT EXTENT 38 | unsigned xlen = EDI->CMD_EXTENT[0]; 39 | unsigned ECX = xlen; 40 | xlen -= ESI->NFN_EXTLEN; 41 | ESI->NFN_EXTLEN = ECX; 42 | ESI->NFN_TOTAL_LENGTH += xlen; 43 | unsigned EAX = ESI->NFN_PATHLEN + ESI->NFN_PRIMLEN; 44 | memcpy(ESI->NFN_TEXT + EAX, EDI->CMD_EXTENT + 1, ECX); 45 | *(int*)(ESI->NFN_TEXT + EAX + ECX) = 0; 46 | } 47 | } 48 | return ESI; 49 | } 50 | 51 | -------------------------------------------------------------------------------- /parse/get_fn.asm: -------------------------------------------------------------------------------- 1 | TITLE GET_FN - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | 7 | PUBLIC GET_FILENAME 8 | 9 | .CODE FILEPARSE_TEXT 10 | 11 | externdef _get_filename:proc 12 | 13 | 14 | GET_FILENAME PROC 15 | push EDX 16 | push ECX 17 | push EAX 18 | call _get_filename 19 | add ESP,12 20 | ret 21 | GET_FILENAME ENDP 22 | 23 | 24 | END 25 | 26 | 27 | -------------------------------------------------------------------------------- /parse/get_fnc.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | unsigned char *_get_filename(CMDLINE_STRUCT *EAX, NFN_STRUCT* ECX, unsigned char *EDX) 5 | { 6 | // EAX IS FILESTUFF_PTR 7 | // ECX IS NFN_STRUCT TO USE 8 | // EDX IS INPTR1 OR SOMETHING 9 | 10 | 11 | // RETURNS: 12 | // EAX IS UPDATED INPTR1 13 | 14 | 15 | unsigned char *ESI = EDX; 16 | CMDLINE_STRUCT *EBX = EAX; 17 | unsigned char AL; 18 | L0: 19 | AL = *ESI++; 20 | if (AL == ' ' || AL == 9) 21 | goto L0; 22 | --ESI; 23 | unsigned char *EDI = &ECX->NFN_TEXT[0]; 24 | L1: 25 | AL = *ESI++; 26 | if (AL == '"') 27 | { 28 | L6: 29 | AL = *ESI++; 30 | if (AL == '"') 31 | goto L1; 32 | *EDI++ = AL; 33 | if (AL == ' ' || !(FNTBL[AL] & FNTBL_ILLEGAL)) 34 | goto L6; 35 | } 36 | else 37 | { 38 | *EDI++ = AL; 39 | if (!(FNTBL[AL] & FNTBL_ILLEGAL) || AL == ' ') 40 | goto L1; 41 | } 42 | 43 | // Bugzilla 4831 workaround: skip filenames with '+' in them 44 | if (AL == '+') 45 | { 46 | // Skip until the end of this filename so this function returns the start of the next filename 47 | while (1) 48 | { 49 | AL = *ESI++; 50 | if (FNTBL[AL] & FNTBL_ILLEGAL && AL != ' ' && AL != '+') 51 | break; 52 | *EDI++ = AL; 53 | } 54 | unsigned len = EDI - &ECX->NFN_TEXT[0]; 55 | //printf("[WARNING] Filename '%.*s' contained the '+' character, ommiting it from the filename list\n", len, &ECX->NFN_TEXT[0]); 56 | ECX->NFN_TOTAL_LENGTH = 0; // Get rid of the filename 57 | return ESI; 58 | 59 | } 60 | 61 | --ESI; 62 | ECX->NFN_TOTAL_LENGTH = EDI - &ECX->NFN_TEXT[1]; 63 | if (ECX->NFN_TOTAL_LENGTH == 0) 64 | { 65 | _err_inbuf_abort(FILE_EXP_ERR); 66 | } 67 | else 68 | { 69 | // EBX IS FILESTUFF_PTR, ECX IS NFN_STRUCT 70 | _do_filename(ECX, EBX); 71 | } 72 | return ESI; 73 | } 74 | 75 | 76 | -------------------------------------------------------------------------------- /parse/go.bat: -------------------------------------------------------------------------------- 1 | NMAKE PARSE.MAK %1= 2 | 3 | -------------------------------------------------------------------------------- /parse/gtnxtu.asm: -------------------------------------------------------------------------------- 1 | TITLE GTNXTU - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC GTNXTU 6 | 7 | 8 | .CODE PHASE1_TEXT 9 | 10 | GTNXTU PROC 11 | ; 12 | ; 13 | ; 14 | MOV AL,[EBX] 15 | INC EBX 16 | CMP AL,'a' 17 | JC L1$ 18 | CMP AL,'z'+1 19 | JNC L1$ 20 | SUB AL,20H 21 | L1$: 22 | RET 23 | 24 | GTNXTU ENDP 25 | 26 | END 27 | 28 | -------------------------------------------------------------------------------- /parse/gtnxtuc.c: -------------------------------------------------------------------------------- 1 | // GTNXTU - Copyright (c) SLR Systems 1994 2 | 3 | 4 | // Get next character from EBX in upper case 5 | unsigned char GTNXTU(const unsigned char **EBX) 6 | { 7 | unsigned char AL = *(*EBX)++; 8 | if (AL >= 'a' && AL <= 'z') 9 | AL -= 0x20; 10 | return AL; 11 | } 12 | -------------------------------------------------------------------------------- /parse/mvfilnam.asm: -------------------------------------------------------------------------------- 1 | TITLE MVFILNAM - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | PUBLIC MOVE_PATH_PRIM_EXT,MOVE_FILE_LIST_GINDEX_PATH_PRIM_EXT 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF _FILE_LIST_GARRAY:STD_PTR_S 12 | 13 | 14 | .CODE ROOT_TEXT 15 | 16 | MOVE_FILE_LIST_GINDEX_PATH_PRIM_EXT PROC 17 | ; 18 | ;ECX IS GINDEX, EAX IS DESTINATION 19 | ; 20 | PUSH EDI 21 | MOV EDI,EAX 22 | CONVERT EDX,ECX,_FILE_LIST_GARRAY 23 | 24 | ASSUME EDX:PTR FILE_LIST_STRUCT 25 | MOV EAX,[EDX].FILE_LIST_PATH_GINDEX 26 | PUSH ESI 27 | TEST EAX,EAX 28 | JZ L5$ 29 | CONVERT EAX,EAX,_FILE_LIST_GARRAY 30 | ASSUME EAX:PTR FILE_LIST_STRUCT 31 | 32 | MOV ECX,[EAX].FILE_LIST_NFN.NFN_PATHLEN 33 | LEA ESI,[EAX].FILE_LIST_NFN.NFN_TEXT 34 | OPTI_MOVSB 35 | L5$: 36 | ; 37 | ;OUTPUT FILENAME IN ASCII PLEASE 38 | ;FROM [SI] TO [DI] 39 | ; 40 | MOV ECX,[EDX].FILE_LIST_NFN.NFN_TOTAL_LENGTH 41 | LEA ESI,[EDX].FILE_LIST_NFN.NFN_TEXT 42 | OPTI_MOVSB 43 | MOV EAX,EDI 44 | POPM ESI,EDI 45 | RET 46 | 47 | MOVE_FILE_LIST_GINDEX_PATH_PRIM_EXT ENDP 48 | 49 | 50 | MOVE_PATH_PRIM_EXT PROC 51 | ; 52 | ;OUTPUT FILENAME IN ASCII PLEASE 53 | ;FROM [ECX] TO [EAX] 54 | ; 55 | PUSHM EDI,ESI 56 | ASSUME EAX:PTR NFN_STRUCT,ECX:PTR NFN_STRUCT 57 | 58 | MOV EDI,EAX 59 | LEA ESI,[ECX].NFN_TEXT 60 | MOV ECX,[ECX].NFN_TOTAL_LENGTH 61 | OPTI_MOVSB 62 | MOV EAX,EDI 63 | POPM ESI,EDI 64 | RET 65 | 66 | MOVE_PATH_PRIM_EXT ENDP 67 | 68 | 69 | END 70 | 71 | -------------------------------------------------------------------------------- /parse/mvfilnamc.c: -------------------------------------------------------------------------------- 1 | 2 | // MVFILNAM - Copyright (c) SLR Systems 1994 3 | 4 | #include "all.h" 5 | 6 | void *_move_file_list_gindex_path_prim_ext(void *EAX, FILE_LIST_STRUCT *ECX) 7 | { 8 | // ECX IS GINDEX, EAX IS DESTINATION 9 | 10 | char *EDI = EAX; 11 | FILE_LIST_STRUCT* EDX = ECX; 12 | FILE_LIST_STRUCT *fls = EDX->FILE_LIST_PATH_GINDEX; 13 | if (fls) 14 | { 15 | unsigned len = fls->FILE_LIST_NFN.NFN_PATHLEN; 16 | memcpy(EDI, fls->FILE_LIST_NFN.NFN_TEXT, len); 17 | EDI += len; 18 | } 19 | 20 | // OUTPUT FILENAME IN ASCII 21 | // FROM [SI] TO [DI] 22 | 23 | unsigned len = EDX->FILE_LIST_NFN.NFN_TOTAL_LENGTH; 24 | memcpy(EDI, EDX->FILE_LIST_NFN.NFN_TEXT, len); 25 | return EDI + len; 26 | } 27 | 28 | void *_move_path_prim_ext(void* EAX, NFN_STRUCT* ECX) 29 | { 30 | // OUTPUT FILENAME IN ASCII 31 | 32 | // FROM [ECX] TO [EAX] 33 | char *p = EAX; 34 | memcpy(p, ECX->NFN_TEXT, ECX->NFN_TOTAL_LENGTH); 35 | p += ECX->NFN_TOTAL_LENGTH; 36 | return p; 37 | } 38 | -------------------------------------------------------------------------------- /parse/mvfn.asm: -------------------------------------------------------------------------------- 1 | TITLE MVFN - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | PUBLIC MOVE_NFN 7 | 8 | 9 | .CODE PHASE1_TEXT 10 | 11 | externdef _move_nfn:proc 12 | 13 | 14 | MOVE_NFN PROC 15 | ; 16 | ;EAX IS TARGET NFN_STRUCT, ECX IS SOURCE 17 | ; 18 | push ECX 19 | push EAX 20 | call _move_nfn 21 | add ESP,8 22 | ret 23 | 24 | PUSH ESI 25 | MOV ESI,ECX 26 | MOV ECX,[ECX].NFN_STRUCT.NFN_TOTAL_LENGTH 27 | PUSH EDI 28 | ADD ECX,NFN_STRUCT.NFN_TEXT+4 29 | MOV EDI,EAX 30 | SHR ECX,2 31 | REP MOVSD 32 | POPM EDI,ESI 33 | RET 34 | 35 | MOVE_NFN ENDP 36 | 37 | 38 | END 39 | 40 | -------------------------------------------------------------------------------- /parse/mvfnasc.asm: -------------------------------------------------------------------------------- 1 | TITLE MVFNASC - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | PUBLIC MOVE_FN_TO_ASCIZ 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF ASCIZ:BYTE 12 | 13 | EXTERNDEF ASCIZ_LEN:DWORD 14 | 15 | 16 | .CODE ROOT_TEXT 17 | 18 | MOVE_FN_TO_ASCIZ PROC 19 | ; 20 | ;MOVE FILNAM [EAX] TO ASCIZ STRING 21 | ; 22 | ASSUME EAX:PTR NFN_STRUCT 23 | 24 | PUSHM EDI,ESI 25 | MOV ECX,[EAX].NFN_TOTAL_LENGTH 26 | MOV EDI,OFF ASCIZ 27 | LEA ESI,[EAX].NFN_TEXT 28 | MOV ASCIZ_LEN,ECX ;LENGTH IN BYTES, NOT 0 29 | OPTI_MOVSB 30 | MOV [EDI],ECX 31 | POPM ESI,EDI 32 | RET 33 | 34 | MOVE_FN_TO_ASCIZ ENDP 35 | 36 | END 37 | 38 | -------------------------------------------------------------------------------- /parse/mvfnascc.c: -------------------------------------------------------------------------------- 1 | // MVFNASC - Copyright (c) SLR Systems 1994 2 | 3 | #include "all.h" 4 | 5 | 6 | void _move_fn_to_asciz(NFN_STRUCT* EAX) 7 | { 8 | // MOVE FILNAM [EAX] TO ASCIZ STRING 9 | 10 | unsigned ECX = EAX->NFN_TOTAL_LENGTH; 11 | ASCIZ_LEN = ECX; // length in bytes, not 0 12 | memcpy(ASCIZ, EAX->NFN_TEXT, ECX); 13 | *(int*)(ASCIZ + ECX) = 0; 14 | } 15 | -------------------------------------------------------------------------------- /parse/mvfnc.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | NFN_STRUCT *_move_nfn(NFN_STRUCT* EAX, NFN_STRUCT* ECX) 5 | { 6 | // EAX IS TARGET NFN_STRUCT, ECX IS SOURCE 7 | return memcpy(EAX, ECX, 8 | // sizeof(NFN_STRUCT) - NFN_TEXT_SIZE + ECX->NFN_TOTAL_LENGTH + 4); 9 | // Not sure if it needs to be 0 terminated. The +4 was so that the asm version could 10 | // always move by 4 byte increments 11 | sizeof(NFN_STRUCT) - NFN_TEXT_SIZE + ECX->NFN_TOTAL_LENGTH + 1); 12 | } 13 | 14 | -------------------------------------------------------------------------------- /parse/mvlistnf.asm: -------------------------------------------------------------------------------- 1 | TITLE MVLISTNF - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | PUBLIC MOVE_FILE_LIST_GINDEX_NFN 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF _FILE_LIST_GARRAY:STD_PTR_S 12 | 13 | 14 | .CODE ROOT_TEXT 15 | 16 | EXTERNDEF _move_ecxpath_eax:proc 17 | 18 | 19 | MOVE_FILE_LIST_GINDEX_NFN PROC 20 | ; 21 | ;MOVE COMPLETE NFN FROM FILE LIST TO NFN STRUCTURE 22 | ; 23 | ;EAX IS NFN_STRUCT 24 | ;ECX IS FILE_LIST_GINDEX 25 | ; 26 | MOV EDX,EAX 27 | CONVERT EAX,ECX,_FILE_LIST_GARRAY 28 | 29 | PUSHM EDI,ESI 30 | 31 | MOV ECX,[EAX].FILE_LIST_STRUCT.FILE_LIST_NFN.NFN_TOTAL_LENGTH 32 | MOV EDI,EDX 33 | 34 | ADD ECX,NFN_STRUCT.NFN_TEXT+4 35 | LEA ESI,FILE_LIST_STRUCT.FILE_LIST_NFN[EAX] 36 | 37 | SHR ECX,2 38 | MOV EAX,[EAX].FILE_LIST_STRUCT.FILE_LIST_PATH_GINDEX 39 | 40 | REP MOVSD 41 | 42 | TEST EAX,EAX 43 | JZ L1$ 44 | 45 | CONVERT EAX,EAX,_FILE_LIST_GARRAY 46 | LEA ECX,FILE_LIST_STRUCT.FILE_LIST_NFN[EAX] 47 | 48 | MOV EAX,EDX 49 | push ECX 50 | push EAX 51 | call _move_ecxpath_eax 52 | add ESP,8 53 | L1$: 54 | POPM ESI,EDI 55 | 56 | RET 57 | 58 | MOVE_FILE_LIST_GINDEX_NFN ENDP 59 | 60 | 61 | END 62 | 63 | -------------------------------------------------------------------------------- /parse/mvlistnfc.c: -------------------------------------------------------------------------------- 1 | // MVLISTNF - Copyright (c) SLR Systems 1994 2 | 3 | #include "all.h" 4 | 5 | //__declspec(naked) 6 | void _move_file_list_gindex_nfn(NFN_STRUCT* EAX, FILE_LIST_STRUCT *ECX) 7 | { 8 | //printf("_move_file_list_gindex_nfn()\r\n"); 9 | // MOVE COMPLETE NFN FROM FILE LIST TO NFN STRUCTURE 10 | 11 | // ECX IS FILE_LIST_GINDEX 12 | #if 0 13 | _asm 14 | { 15 | mov ECX,8[ESP] 16 | mov EAX,4[ESP] 17 | 18 | mov EDX,EAX 19 | mov EAX,ECX 20 | push EDI 21 | push ESI 22 | mov ECX,034h[EAX] 23 | mov EDI,EDX 24 | add ECX,020h 25 | lea ESI,01Ch[EAX] 26 | shr ECX,2 27 | mov EAX,8[EAX] 28 | rep movsd 29 | test EAX,EAX 30 | je L2C 31 | lea ECX,01Ch[EAX] 32 | mov EAX,EDX 33 | push ECX 34 | push EAX 35 | call near ptr _move_ecxpath_eax 36 | add ESP,8 37 | L2C: pop ESI 38 | pop EDI 39 | ret 40 | } 41 | #else 42 | unsigned len = ECX->FILE_LIST_NFN.NFN_TOTAL_LENGTH + 43 | sizeof(NFN_STRUCT) - NFN_TEXT_SIZE + 4; 44 | 45 | NFN_STRUCT *ESI = &ECX->FILE_LIST_NFN; 46 | FILE_LIST_STRUCT *fls = ECX->FILE_LIST_PATH_GINDEX; 47 | memcpy(EAX, ESI, (len / 4) * 4); 48 | 49 | if (fls) 50 | { 51 | _move_ecxpath_eax(EAX, &fls->FILE_LIST_NFN); 52 | } 53 | #endif 54 | } 55 | 56 | -------------------------------------------------------------------------------- /parse/mvpath.asm: -------------------------------------------------------------------------------- 1 | TITLE MVPATH - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | PUBLIC MOVE_ECXPATH_EAX 7 | 8 | 9 | .DATA 10 | 11 | 12 | .CODE PHASE1_TEXT 13 | 14 | externdef _move_ecxpath_eax:proc 15 | 16 | MOVE_ECXPATH_EAX PROC 17 | ; 18 | ;MOVE PATH FROM ECX TO EAX, PRESERVE EAX 19 | ; 20 | push ECX 21 | push EAX 22 | call _move_ecxpath_eax 23 | add ESP, 8 24 | ret 25 | 26 | PUSH EDI 27 | MOV EDX,EAX 28 | 29 | ASSUME EDX:PTR NFN_STRUCT,EAX:PTR NFN_STRUCT 30 | ; 31 | ;FIRST, GET RID OF EXISTING PATH 32 | ; 33 | PUSHM ESI,EBX 34 | 35 | MOV EAX,[EAX].NFN_PATHLEN 36 | MOV EBX,ECX 37 | ASSUME EAX:NOTHING,EBX:PTR NFN_STRUCT 38 | 39 | TEST EAX,EAX 40 | JZ L1$ 41 | 42 | MOV ECX,[EDX].NFN_TOTAL_LENGTH 43 | LEA ESI,[EDX].NFN_TEXT 44 | 45 | SUB ECX,EAX 46 | MOV EDI,ESI 47 | 48 | ADD ESI,EAX 49 | MOV [EDX].NFN_TOTAL_LENGTH,ECX 50 | 51 | REP MOVSB 52 | L1$: 53 | ; 54 | ;NEXT MOVE ALL DOWN PATHLEN BYTES 55 | ; 56 | LEA ESI,[EDX].NFN_TEXT-1 57 | MOV ECX,[EDX].NFN_TOTAL_LENGTH 58 | 59 | ADD ESI,ECX 60 | MOV EAX,[EBX].NFN_PATHLEN 61 | 62 | STD 63 | 64 | LEA EDI,[EAX+ESI] 65 | 66 | REP MOVSB 67 | 68 | CLD 69 | 70 | MOV ECX,[EBX].NFN_PATHLEN 71 | MOV EAX,[EDX].NFN_TOTAL_LENGTH 72 | 73 | MOV [EDX].NFN_PATHLEN,ECX 74 | ADD EAX,ECX 75 | 76 | LEA ESI,[EBX].NFN_TEXT 77 | MOV [EDX].NFN_TOTAL_LENGTH,EAX 78 | 79 | LEA EDI,[EDX].NFN_TEXT 80 | POP EBX 81 | 82 | REP MOVSB 83 | 84 | POPM ESI,EDI 85 | 86 | MOV DPTR [EAX+EDX].NFN_TEXT,ECX 87 | MOV EAX,EDX 88 | 89 | RET 90 | 91 | MOVE_ECXPATH_EAX ENDP 92 | 93 | 94 | END 95 | 96 | -------------------------------------------------------------------------------- /parse/mvpathc.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | int toupper(int c) 5 | { 6 | return (c >= 'a' && c <= 'z') ? c - 'a' + 'A' : c; 7 | } 8 | 9 | unsigned strlen(const char *p) 10 | { 11 | unsigned len = 0; 12 | while (*p++) 13 | { 14 | len++; 15 | } 16 | return len; 17 | } 18 | 19 | void *memset(void *p, int value, unsigned n) 20 | { 21 | while (n--) 22 | { 23 | ((unsigned char*)p)[n] = value; 24 | } 25 | } 26 | 27 | void *memcpy(void *dst, const void *src, unsigned n) 28 | { 29 | for (unsigned i = 0; i < n; i++) 30 | ((char *)dst)[i] = ((const char *)src)[i]; 31 | return dst; 32 | } 33 | 34 | void *memmove(void *dst, const void *src, unsigned n) 35 | { 36 | if (dst < src) 37 | { 38 | for (unsigned i = 0; i < n; i++) 39 | ((char *)dst)[i] = ((const char *)src)[i]; 40 | } 41 | else 42 | { 43 | for (unsigned i = n; i--; ) 44 | ((char *)dst)[i] = ((const char *)src)[i]; 45 | } 46 | return dst; 47 | } 48 | 49 | int memcmp(const void *p1, const void *p2, unsigned n) 50 | { 51 | //printf("memcmp(%p, %p, %d)\n", p1, p2, n); 52 | int c = 0; 53 | const char *s1 = (const char *)p1; 54 | const char *s2 = (const char *)p2; 55 | while (n--) 56 | { 57 | c = *s1 - *s2; 58 | if (c) 59 | break; 60 | s1++; 61 | s2++; 62 | } 63 | return c; 64 | } 65 | 66 | char *memchr(char *p, char c, unsigned n) 67 | { 68 | while (n) 69 | { n--; 70 | if (*p == c) 71 | return p; 72 | p++; 73 | } 74 | return (char*)0; 75 | } 76 | 77 | NFN_STRUCT *_move_ecxpath_eax(NFN_STRUCT* EAX, NFN_STRUCT* ECX) 78 | { 79 | // MOVE PATH FROM ECX TO EAX, PRESERVE EAX 80 | 81 | NFN_STRUCT *dst = EAX; 82 | NFN_STRUCT *src = ECX; 83 | 84 | // Make room 85 | memmove(&dst->NFN_TEXT[src->NFN_PATHLEN], 86 | &dst->NFN_TEXT[dst->NFN_PATHLEN], 87 | dst->NFN_TOTAL_LENGTH - dst->NFN_PATHLEN); 88 | 89 | // Copy path 90 | memcpy(dst->NFN_TEXT, src->NFN_TEXT, src->NFN_PATHLEN); 91 | 92 | dst->NFN_TOTAL_LENGTH += src->NFN_PATHLEN - dst->NFN_PATHLEN; 93 | dst->NFN_PATHLEN = src->NFN_PATHLEN; 94 | 95 | *(int*)&dst->NFN_TEXT[dst->NFN_TOTAL_LENGTH] = 0; 96 | return dst; 97 | } 98 | 99 | -------------------------------------------------------------------------------- /parse/mvsrcfil.asm: -------------------------------------------------------------------------------- 1 | TITLE MVSRCFIL - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | PUBLIC MOVE_SRCPRIM_TO_EAX_CLEAN,MOVE_SRCPRIM_TO_EAX,MOVE_ECXPRIM_TO_EAX 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF SRCNAM:NFN_STRUCT 12 | 13 | 14 | .CODE FILEPARSE_TEXT 15 | 16 | MOVE_SRCPRIM_TO_EAX_CLEAN LABEL PROC 17 | 18 | ASSUME EAX:PTR NFN_STRUCT 19 | 20 | XOR ECX,ECX 21 | MOV [EAX].NFN_PRIMLEN,ECX 22 | MOV [EAX].NFN_PATHLEN,ECX 23 | MOV [EAX].NFN_EXTLEN,ECX 24 | MOV [EAX].NFN_TOTAL_LENGTH,ECX 25 | 26 | MOVE_SRCPRIM_TO_EAX PROC 27 | ; 28 | ;MOVE PRIMARY PART OF SRCNAM TO FILNAM 29 | ; 30 | MOV ECX,OFF SRCNAM 31 | ASSUME ECX:PTR NFN_STRUCT 32 | 33 | MOVE_ECXPRIM_TO_EAX LABEL PROC 34 | ; 35 | ;FIRST DELETE ANY EXISTING PRIMARY NAME 36 | ; 37 | PUSH EDI 38 | MOV EDX,ECX 39 | ASSUME ECX:NOTHING,EDX:PTR NFN_STRUCT 40 | 41 | MOV ECX,[EAX].NFN_PRIMLEN 42 | PUSH ESI 43 | OR ECX,ECX 44 | LEA ESI,[EAX].NFN_TEXT 45 | JZ L1$ 46 | ADD ESI,[EAX].NFN_PATHLEN 47 | SUB [EAX].NFN_TOTAL_LENGTH,ECX 48 | MOV EDI,ESI 49 | ADD ESI,ECX 50 | MOV ECX,[EAX].NFN_EXTLEN 51 | REP MOVSB 52 | L1$: 53 | ; 54 | ;NEXT MOVE EXTENT DOWN PRIMLEN BYTES 55 | ; 56 | LEA ESI,[EAX].NFN_TEXT-1 57 | MOV ECX,[EAX].NFN_EXTLEN 58 | ADD ESI,[EAX].NFN_TOTAL_LENGTH 59 | MOV EDI,ESI 60 | STD 61 | ADD EDI,[EDX].NFN_PRIMLEN 62 | REP MOVSB 63 | CLD 64 | INC EDI 65 | ; 66 | ;NOW MOVE PRIMARY FROM SRCNAM 67 | ; 68 | LEA ESI,[EDX].NFN_TEXT 69 | MOV ECX,[EDX].NFN_PRIMLEN 70 | ADD ESI,[EDX].NFN_PATHLEN 71 | MOV [EAX].NFN_PRIMLEN,ECX 72 | ADD [EAX].NFN_TOTAL_LENGTH,ECX 73 | SUB EDI,ECX 74 | MOV EDX,[EAX].NFN_TOTAL_LENGTH 75 | REP MOVSB 76 | MOV DPTR [EDX+EAX].NFN_TEXT,ECX 77 | POPM ESI,EDI 78 | RET 79 | 80 | MOVE_SRCPRIM_TO_EAX ENDP 81 | 82 | 83 | END 84 | 85 | -------------------------------------------------------------------------------- /parse/mvsrcfilc.c: -------------------------------------------------------------------------------- 1 | // MVSRCFIL - Copyright (c) SLR Systems 1994 2 | 3 | #include "all.h" 4 | 5 | void _move_ecxprim_to_eax(NFN_STRUCT* EAX, NFN_STRUCT* ECX); 6 | 7 | #if 0 8 | void _move_srcprim_to_eax_clean(NFN_STRUCT* EAX) 9 | { 10 | EAX->NFN_PRIMLEN = 0; 11 | EAX->NFN_PATHLEN = 0; 12 | EAX->NFN_EXTLEN = 0; 13 | EAX->NFN_TOTAL_LENGTH = 0; 14 | _move_srcprim_to_eax(EAX); 15 | } 16 | #endif 17 | 18 | void _move_srcprim_to_eax(NFN_STRUCT* EAX) 19 | { 20 | // MOVE PRIMARY PART OF SRCNAM TO FILNAM 21 | 22 | _move_ecxprim_to_eax(EAX, &SRCNAM); 23 | } 24 | 25 | void _move_ecxprim_to_eax(NFN_STRUCT* EAX, NFN_STRUCT* ECX) 26 | { 27 | NFN_STRUCT *dst = EAX; 28 | NFN_STRUCT *src = ECX; 29 | 30 | // Make room 31 | memmove(&dst->NFN_TEXT[dst->NFN_PATHLEN + src->NFN_PRIMLEN], 32 | &dst->NFN_TEXT[dst->NFN_PATHLEN + dst->NFN_PRIMLEN], 33 | dst->NFN_EXTLEN); 34 | 35 | // Copy path 36 | memcpy(&dst->NFN_TEXT[dst->NFN_PATHLEN], 37 | &src->NFN_TEXT[src->NFN_PATHLEN], 38 | src->NFN_PRIMLEN); 39 | 40 | dst->NFN_TOTAL_LENGTH += src->NFN_PRIMLEN - dst->NFN_PRIMLEN; 41 | dst->NFN_PRIMLEN = src->NFN_PRIMLEN; 42 | 43 | *(int*)&dst->NFN_TEXT[dst->NFN_TOTAL_LENGTH] = 0; 44 | // return dst; 45 | } 46 | 47 | -------------------------------------------------------------------------------- /revert.bat: -------------------------------------------------------------------------------- 1 | copy \dm\bin\linkold.exe \dm\bin\link.exe 2 | copy \dm\bin\link.exe \cbx\optlinkc\os2link\objnt\link.exe 3 | 4 | -------------------------------------------------------------------------------- /subs/casecomp.asm: -------------------------------------------------------------------------------- 1 | TITLE CASECOMP - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC CASE_STRING_COMPARE_EASY,CASE_STRING_COMPARE_HARD 6 | 7 | 8 | .DATA 9 | 10 | EXTERNDEF UPPER_TABLE:BYTE 11 | 12 | 13 | .CODE ROOT_TEXT 14 | 15 | 16 | CASE_STRING_COMPARE_EASY PROC 17 | ; 18 | ;DS:SI IS STRING1, ES:DI IS STRING2 19 | ;CX IS BYTE-LENGTH OF ONE OF THEM 20 | ; 21 | SHR ECX,2 22 | 23 | INC ECX ;ROUND UP TO TEST 0 AT END 24 | 25 | REPE CMPSD 26 | 27 | RET 28 | 29 | CASE_STRING_COMPARE_EASY ENDP 30 | 31 | 32 | CASE_STRING_COMPARE_HARD PROC 33 | ; 34 | ;MOST CASES STILL MATCH ANYWAY 35 | ; 36 | SHR ECX,2 37 | 38 | INC ECX ;COUNT A ZERO 39 | 40 | REPE CMPSD ;USUAL CASE IS CASE MATCHES 41 | 42 | JNZ L5$ 43 | 44 | RET 45 | 46 | L5$: 47 | PUSHM EBP,EDX 48 | PUSHM EBX,EAX 49 | 50 | XOR EAX,EAX 51 | XOR EBX,EBX 52 | 53 | MOV EBP,OFF UPPER_TABLE 54 | ; 55 | ;TRY IGNORING CASE... 56 | ; 57 | MOV AL,[ESI-4] 58 | 59 | SUB ESI,3 60 | MOV BL,[EDI-4] 61 | 62 | SUB EDI,3 63 | INC ECX 64 | L6$: 65 | MOV DL,[EBP+EAX] 66 | MOV AL,[ESI] 67 | 68 | INC ESI 69 | MOV DH,[EBP+EBX] 70 | 71 | MOV BL,[EDI] 72 | INC EDI 73 | 74 | CMP DL,DH 75 | JNZ L9$ 76 | 77 | MOV DL,[EBP+EAX] 78 | MOV AL,[ESI] 79 | 80 | INC ESI 81 | MOV DH,[EBP+EBX] 82 | 83 | MOV BL,[EDI] 84 | INC EDI 85 | 86 | CMP DL,DH 87 | JNZ L9$ 88 | 89 | MOV DL,[EBP+EAX] 90 | MOV AL,[ESI] 91 | 92 | INC ESI 93 | MOV DH,[EBP+EBX] 94 | 95 | MOV BL,[EDI] 96 | INC EDI 97 | 98 | CMP DL,DH 99 | JNZ L9$ 100 | 101 | MOV DL,[EBP+EAX] 102 | MOV AL,[EBP+EBX] 103 | 104 | CMP DL,AL 105 | JNZ L9$ 106 | 107 | DEC ECX 108 | JZ L9$ 109 | 110 | MOV AL,[ESI] 111 | INC ESI 112 | 113 | MOV BL,[EDI] 114 | INC EDI 115 | 116 | JMP L6$ 117 | 118 | L9$: 119 | POPM EAX,EBX 120 | 121 | POPM EDX,EBP 122 | 123 | RET 124 | 125 | CASE_STRING_COMPARE_HARD ENDP 126 | 127 | 128 | END 129 | 130 | -------------------------------------------------------------------------------- /subs/dismap.asm: -------------------------------------------------------------------------------- 1 | TITLE DISMAP 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC DISABLE_MAPOUT,_FLUSH_DISABLE_MAPOUT 6 | 7 | 8 | .DATA 9 | 10 | EXTERNDEF MAP_DEVICE:DWORD 11 | 12 | EXTERNDEF LOUTALL:DWORD 13 | 14 | 15 | .CODE ROOT_TEXT 16 | 17 | EXTERNDEF _flush_trunc_close:proc,ROOT_RET:PROC 18 | 19 | 20 | _FLUSH_DISABLE_MAPOUT PROC 21 | ; 22 | ; 23 | ; 24 | BITT MAP_FLUSHED 25 | JNZ L2$ 26 | 27 | PUSHAD 28 | 29 | SETT MAP_FLUSHED 30 | 31 | MOV EAX,MAP_DEVICE 32 | push EAX 33 | call _flush_trunc_close 34 | add ESP,4 35 | 36 | POPAD 37 | L2$: 38 | DISABLE_MAPOUT LABEL PROC 39 | 40 | MOV LOUTALL,OFF ROOT_RET 41 | 42 | RET 43 | 44 | _FLUSH_DISABLE_MAPOUT ENDP 45 | 46 | _disable_mapout PROC 47 | MOV LOUTALL,OFF ROOT_RET 48 | RET 49 | _disable_mapout endp 50 | 51 | END 52 | 53 | -------------------------------------------------------------------------------- /subs/eoind.asm: -------------------------------------------------------------------------------- 1 | TITLE EOIND - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | PUBLIC END_OF_INDIRECT 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF IND_DEVICE:DWORD 12 | 13 | 14 | .CODE PHASE1_TEXT 15 | 16 | EXTERNDEF RELEASE_IO_SEGMENT:PROC,_close_handle:proc 17 | 18 | 19 | END_OF_INDIRECT PROC 20 | ; 21 | ; 22 | ; 23 | PUSH EBX 24 | XOR ECX,ECX 25 | MOV EBX,IND_DEVICE 26 | ASSUME EBX:PTR MYI_STRUCT 27 | 28 | RESS INDIRECT_MODE,CL 29 | TEST EBX,EBX 30 | JZ EOI_1 31 | MOV EAX,[EBX].MYI_BLOCK 32 | MOV [EBX].MYI_BLOCK,ECX 33 | TEST EAX,EAX 34 | JZ L1$ 35 | CALL RELEASE_IO_SEGMENT 36 | L1$: 37 | MOV EAX,[EBX].MYI_HANDLE 38 | MOV [EBX].MYI_HANDLE,ECX 39 | MOV IND_DEVICE,ECX 40 | TEST EAX,EAX 41 | JZ EOI_1 42 | 43 | push EAX 44 | call _close_handle 45 | add ESP,4 46 | EOI_1: 47 | POP EBX 48 | RET 49 | 50 | END_OF_INDIRECT ENDP 51 | 52 | 53 | END 54 | 55 | -------------------------------------------------------------------------------- /subs/eoindc.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | #include "all.h" 4 | 5 | void _end_of_indirect() 6 | { 7 | struct MYI_STRUCT *EBX = IND_DEVICE; 8 | 9 | INDIRECT_MODE = 0; 10 | if (EBX) 11 | { 12 | void *EAX = EBX->MYI_BLOCK; 13 | EBX->MYI_BLOCK = 0; 14 | if (EAX) 15 | _release_io_segment(EAX); 16 | EAX = EBX->MYI_HANDLE; 17 | EBX->MYI_HANDLE = 0; 18 | IND_DEVICE = 0; 19 | if (EAX) 20 | _close_handle(EAX); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /subs/getname.asm: -------------------------------------------------------------------------------- 1 | TITLE GETNAME - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC GET_OMF_NAME_LENGTH_ROUTINE,GET_OMF_NAME_LENGTH_EDI,TOO_LONG 6 | 7 | 8 | .DATA 9 | 10 | 11 | .CODE PASS1_TEXT 12 | 13 | EXTERNDEF ERR_ABORT:PROC 14 | 15 | EXTERNDEF TOO_LONG_ERR:ABS 16 | 17 | 18 | GET_OMF_NAME_LENGTH_ROUTINE PROC 19 | ; 20 | ; 21 | ; 22 | XOR EAX,EAX 23 | 24 | MOV AL,[ESI] 25 | INC ESI 26 | 27 | CMP AL,-1 28 | JZ L1$ 29 | L2$: 30 | RET 31 | 32 | L1$: 33 | CMP BPTR [ESI],AH 34 | JNZ L2$ 35 | 36 | MOV AX,[ESI+1] 37 | ADD ESI,3 38 | 39 | CMP EAX,SYMBOL_TEXT_SIZE 40 | JA TOO_LONG 41 | 42 | RET 43 | 44 | TOO_LONG:: 45 | MOV AL,TOO_LONG_ERR 46 | CALL ERR_ABORT 47 | 48 | 49 | GET_OMF_NAME_LENGTH_ROUTINE ENDP 50 | 51 | 52 | GET_OMF_NAME_LENGTH_EDI PROC 53 | ; 54 | ; 55 | ; 56 | XOR EAX,EAX 57 | 58 | MOV AL,[EDI] 59 | INC EDI 60 | 61 | CMP AL,-1 62 | JZ L1$ 63 | L2$: 64 | RET 65 | 66 | L1$: 67 | CMP BPTR [EDI],AH 68 | JNZ L2$ 69 | 70 | MOV AX,[EDI+1] 71 | ADD EDI,3 72 | 73 | CMP EAX,SYMBOL_TEXT_SIZE 74 | JA TOO_LONG 75 | 76 | RET 77 | 78 | GET_OMF_NAME_LENGTH_EDI ENDP 79 | 80 | 81 | END 82 | 83 | -------------------------------------------------------------------------------- /subs/getnamec.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | #include "all.h" 4 | 5 | int _get_omf_name_length_routine(unsigned char **pp) 6 | { 7 | unsigned char *p = *pp; 8 | int n = *p++; 9 | if (n == 0xFF && *p == 0) 10 | { 11 | n = *(unsigned short *)(p + 1); 12 | p += 3; 13 | if (n > SYMBOL_TEXT_SIZE) 14 | _err_abort(TOO_LONG_ERR); 15 | } 16 | *pp = p; 17 | return n; 18 | } 19 | 20 | void xTOO_LONG() 21 | { 22 | _err_abort(TOO_LONG_ERR); 23 | } 24 | 25 | /* 26 | GET_OMF_NAME_LENGTH_EDI PROC 27 | ; 28 | ; 29 | ; 30 | XOR EAX,EAX 31 | 32 | MOV AL,[EDI] 33 | INC EDI 34 | 35 | CMP AL,-1 36 | JZ L1$ 37 | L2$: 38 | RET 39 | 40 | L1$: 41 | CMP BPTR [EDI],AH 42 | JNZ L2$ 43 | 44 | MOV AX,[EDI+1] 45 | ADD EDI,3 46 | 47 | CMP EAX,SYMBOL_TEXT_SIZE 48 | JA TOO_LONG 49 | 50 | RET 51 | 52 | GET_OMF_NAME_LENGTH_EDI ENDP 53 | */ 54 | -------------------------------------------------------------------------------- /subs/getsmmod.asm: -------------------------------------------------------------------------------- 1 | TITLE GETSMMOD - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE SEGMENTS 5 | INCLUDE MODULES 6 | 7 | PUBLIC GET_SM_MODULE 8 | 9 | 10 | .DATA 11 | 12 | EXTERNDEF CSEG_GARRAY:STD_PTR_S 13 | 14 | 15 | .CODE ROOT_TEXT 16 | 17 | 18 | GET_SM_MODULE PROC 19 | ; 20 | ;EAX IS SEGMOD PHYSICAL, RETURN EAX IS PARENT MODULE GINDEX 21 | ; 22 | ASSUME EAX:PTR SEGMOD_STRUCT 23 | 24 | MOV CL,[EAX]._SM_FLAGS_2 25 | MOV EAX,[EAX]._SM_MODULE_CSEG_GINDEX 26 | 27 | AND CL,MASK SM2_CSEG_DONE 28 | JNZ L1$ 29 | 30 | RET 31 | 32 | L1$: 33 | CONVERT EAX,EAX,CSEG_GARRAY 34 | ASSUME EAX:PTR CSEG_STRUCT 35 | 36 | MOV EAX,[EAX]._CSEG_PARENT_MOD_GINDEX 37 | 38 | RET 39 | 40 | GET_SM_MODULE ENDP 41 | 42 | 43 | END 44 | 45 | -------------------------------------------------------------------------------- /subs/go.bat: -------------------------------------------------------------------------------- 1 | NMAKE SUBS.MAK %1= 2 | 3 | -------------------------------------------------------------------------------- /subs/hexwout.asm: -------------------------------------------------------------------------------- 1 | TITLE HEXWOUT - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC HEXDWOUTSH 6 | 7 | 8 | .DATA 9 | 10 | EXTERNDEF HEXTBL:BYTE 11 | 12 | 13 | .CODE PASS2_TEXT 14 | 15 | 16 | HEXDWOUTSH PROC 17 | ; 18 | ;OUTPUT EAX WITH LEADING ZEROS SUPPRESSED 19 | ; 20 | PUSH EBX 21 | XOR ECX,ECX 22 | 23 | MOV EBX,OFF HEXTBL 24 | PUSH EAX 25 | 26 | SHR EAX,16 27 | CALL HEXWOUTS 28 | 29 | POP EAX 30 | CALL HEXWOUTS 31 | 32 | OR CL,CL 33 | JZ L1$ 34 | 35 | MOV BPTR [EDI],'H' 36 | 37 | POP EBX 38 | INC EDI 39 | 40 | RET 41 | 42 | L1$: 43 | MOV WPTR [EDI],'H0' 44 | 45 | POP EBX 46 | ADD EDI,2 47 | 48 | RET 49 | 50 | HEXDWOUTSH ENDP 51 | 52 | 53 | HEXWOUTS PROC 54 | ; 55 | ; 56 | ; 57 | PUSH EAX 58 | MOV AL,AH 59 | 60 | CALL HEXBOUT 61 | 62 | POP EAX 63 | HEXBOUT: 64 | PUSH EAX 65 | 66 | SHR AL,4 67 | CALL HNIBBLE 68 | 69 | POP EAX 70 | HNIBBLE: 71 | AND EAX,0FH 72 | JZ HEX0 73 | 74 | MOV AL,[EBX+EAX] 75 | MOV CL,30H 76 | 77 | MOV [EDI],AL 78 | INC EDI 79 | 80 | RET 81 | 82 | HEX0: 83 | OR CL,CL 84 | JZ L9$ 85 | 86 | MOV [EDI],CL 87 | INC EDI 88 | L9$: 89 | RET 90 | 91 | HEXWOUTS ENDP 92 | 93 | 94 | END 95 | 96 | -------------------------------------------------------------------------------- /subs/link: -------------------------------------------------------------------------------- 1 | OBJ\SET_OUTF.OBJ SET_OUTF.ASM ..\COMMON\MACROS ..\COMMON\IO_STRUC ..\COMMON\SECTIONS 2 | SET_OUTF,OBJ\/ZI; 3 | 4 | OBJ\RELEXE_5.OBJ RELEXE_5.ASM ..\COMMON\MACROS 5 | RELEXE_5,OBJ\/ZI; 6 | 7 | OBJ\HEXWOUT.OBJ HEXWOUT.ASM ..\COMMON\MACROS 8 | HEXWOUT,OBJ\/ZI; 9 | 10 | OBJ\EOIND.OBJ EOIND.ASM ..\COMMON\MACROS ..\COMMON\IO_STRUC 11 | EOIND,OBJ\/ZI; 12 | 13 | OBJ\ARRAYS.OBJ ARRAYS.ASM ..\COMMON\MACROS 14 | ARRAYS,OBJ\/ZI; 15 | 16 | OBJ\LOWEST.OBJ LOWEST.ASM ..\COMMON\MACROS 17 | LOWEST,OBJ\/ZI; 18 | 19 | OBJ\STORESEQ.OBJ STORESEQ.ASM ..\COMMON\MACROS 20 | STORESEQ,OBJ\/ZI; 21 | 22 | OBJ\MYIS.OBJ MYIS.ASM ..\COMMON\MACROS ..\COMMON\IO_STRUC 23 | MYIS,OBJ\/ZI; 24 | 25 | OBJ\XREF.OBJ XREF.ASM ..\COMMON\MACROS 26 | XREF,OBJ\/ZI; 27 | 28 | OBJ\FREEZE.OBJ FREEZE.ASM ..\COMMON\MACROS 29 | FREEZE,OBJ\/ZI; 30 | 31 | ; OBJ\UNALIAS.OBJ UNALIAS.ASM ..\COMMON\MACROS ..\COMMON\SYMBOLS 32 | ;UNALIAS,OBJ\/ZI; 33 | 34 | OBJ\PERFORM.OBJ PERFORM.ASM ..\COMMON\MACROS 35 | PERFORM,OBJ\/ZI; 36 | 37 | OBJ\CASECOMP.OBJ CASECOMP.ASM ..\COMMON\MACROS 38 | CASECOMP,OBJ\/ZI; 39 | 40 | OBJ\LISTINIT.OBJ LISTINIT.ASM ..\COMMON\IO_STRUC ..\COMMON\MACROS 41 | LISTINIT/ZI,OBJ\; 42 | 43 | OBJ\LOCAL.OBJ LOCAL.ASM ..\COMMON\MACROS 44 | LOCAL/ZI,OBJ\; 45 | 46 | OBJ\TPTRVPTR.OBJ TPTRVPTR.ASM ..\COMMON\MACROS 47 | TPTRVPTR/ZI,OBJ\; 48 | 49 | OBJ\GETSMMOD.OBJ GETSMMOD.ASM ..\COMMON\MACROS ..\COMMON\SEGMENTS ..\COMMON\MODULES 50 | GETSMMOD/ZI,OBJ\; 51 | 52 | OBJ\DISMAP.OBJ DISMAP.ASM ..\COMMON\MACROS 53 | DISMAP/ZI,OBJ\; 54 | 55 | OBJ\FINDCVPK.OBJ FINDCVPK.ASM ..\COMMON\MACROS ..\COMMON\IO_STRUC 56 | FINDCVPK/ZI,OBJ\; 57 | 58 | OBJ\OVLTERM.OBJ OVLTERM.ASM 59 | OVLTERM/ZI,OBJ\; 60 | 61 | OBJ\TDPARTBL.OBJ TDPARTBL.ASM ..\COMMON\MACROS ..\COMMON\TDBG 62 | TDPARTBL/ZI,OBJ\; 63 | 64 | OBJ\GETNAME.OBJ GETNAME.ASM ..\COMMON\MACROS 65 | GETNAME/ZI,OBJ\; 66 | 67 | -------------------------------------------------------------------------------- /subs/listinit.asm: -------------------------------------------------------------------------------- 1 | TITLE LISTINIT - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | PUBLIC LIST_INIT 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF _FILE_LIST_GARRAY:STD_PTR_S,OUTFILE_GARRAY:STD_PTR_S 12 | 13 | EXTERNDEF LOUTALL:DWORD,IMP_OUTALL:DWORD 14 | 15 | 16 | .CODE ROOT_TEXT 17 | 18 | EXTERNDEF _open_output:proc,_flush_buffer:proc,LST_OUT:PROC,ROOT_RET:PROC,IMP_OUT:PROC 19 | 20 | 21 | LIST_INIT PROC 22 | ; 23 | ;EAX IS OUTFILE GINDEX 24 | ; 25 | ;RETURNS: 26 | ; EAX IS OUTPUT DEVICE 27 | ; 28 | ;SET UP OUTPUT STUFF FOR LISTING 29 | ;FIRST, IF LISTING DEVICE IS NUL, SET JMP TABLE TO 'RET' 30 | ;ELSE IF DEVICE IS CONSOLE, STE JMP TABLE TO JUST OUTPUT LINE 31 | ; 32 | CALL LIST_INIT1 33 | MOV LOUTALL,EAX 34 | MOV EAX,ECX 35 | RET 36 | 37 | LIST_INIT ENDP 38 | 39 | if fg_segm 40 | 41 | PUBLIC IMP_INIT 42 | 43 | IMP_INIT PROC 44 | ; 45 | ; 46 | ; 47 | CALL LIST_INIT1 48 | CMP EAX,OFF LST_OUT 49 | JNZ L1$ 50 | MOV EAX,OFF IMP_OUT 51 | L1$: 52 | MOV IMP_OUTALL,EAX 53 | MOV EAX,ECX 54 | RET 55 | 56 | IMP_INIT ENDP 57 | 58 | endif 59 | 60 | if fg_rom 61 | PUBLIC BINOUT_INIT 62 | 63 | BINOUT_INIT PROC 64 | 65 | CALL LIST_INIT1 66 | CMP CX,OFF LST_OUT 67 | JNZ 1$ 68 | LEA CX,BIN_OUT 69 | 1$: 70 | MOV BOUTALL.OFFS,CX 71 | if @CodeSize 72 | MOV BOUTALL.SEGM,AX 73 | endif 74 | RET 75 | 76 | BINOUT_INIT ENDP 77 | 78 | endif 79 | 80 | 81 | LIST_INIT1 PROC NEAR 82 | ; 83 | ;EAX IS OUTFILE GINDEX 84 | ; 85 | ;RETURNS: 86 | ; EAX IS OUTPUT ROUTINE 87 | ; ECX IS OUTPUT DEVICE 88 | ; 89 | TEST EAX,EAX 90 | JZ L1$ 91 | CONVERT EAX,EAX,OUTFILE_GARRAY 92 | MOV EAX,[EAX].OUTFILE_STRUCT._OF_FILE_LIST_GINDEX 93 | MOV ECX,EAX 94 | CONVERT EAX,EAX,_FILE_LIST_GARRAY 95 | 96 | TEST [EAX].NFN_STRUCT.NFN_FLAGS,MASK NFN_NUL 97 | JZ L5$ 98 | L1$: 99 | MOV EAX,OFF ROOT_RET 100 | XOR ECX,ECX 101 | RET 102 | 103 | L5$: 104 | ; 105 | ;NEED TO ALLOCATE BUFFER SPACE LIKE OBJ FILE 106 | ; 107 | MOV EAX,ECX 108 | push EAX 109 | call _open_output 110 | add ESP,4 111 | MOV [EAX].MYO_STRUCT.MYO_FLUSHBUF,OFF _flush_buffer 112 | mov ECX,EAX 113 | MOV EAX,OFF LST_OUT 114 | RET 115 | 116 | LIST_INIT1 ENDP 117 | 118 | 119 | END 120 | 121 | -------------------------------------------------------------------------------- /subs/local.asm: -------------------------------------------------------------------------------- 1 | TITLE LOCAL_STORAGE - Copyright (C) 1994 SLR Systems 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC _release_local_storage 6 | PUBLIC RELEASE_LOCAL_STORAGE,INIT_LOCAL_STORAGE 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF LNAME_STUFF:ALLOCS_STRUCT 12 | 13 | 14 | .CODE ROOT_TEXT 15 | 16 | EXTERNDEF _release_minidata:proc 17 | EXTERNDEF _release_minidata:proc,INIT_ARRAYS:PROC 18 | 19 | 20 | _release_local_storage PROC 21 | mov EAX,OFF LNAME_STUFF 22 | push EAX 23 | call _release_minidata 24 | add ESP,4 25 | ret 26 | _release_local_storage ENDP 27 | 28 | RELEASE_LOCAL_STORAGE PROC 29 | ; 30 | ; 31 | ; 32 | MOV EAX,OFF LNAME_STUFF 33 | push EAX 34 | call _release_minidata 35 | add ESP,4 36 | RET 37 | 38 | RELEASE_LOCAL_STORAGE ENDP 39 | 40 | 41 | INIT_LOCAL_STORAGE PROC 42 | ; 43 | ; 44 | ; 45 | JMP INIT_ARRAYS 46 | ; RET 47 | 48 | INIT_LOCAL_STORAGE ENDP 49 | 50 | 51 | END 52 | 53 | -------------------------------------------------------------------------------- /subs/myis.asm: -------------------------------------------------------------------------------- 1 | TITLE MYIS - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | 6 | PUBLIC RELEASE_MYI_PTR 7 | 8 | 9 | .DATA 10 | 11 | EXTERNDEF LAST_FILENAME_GINDEX:DWORD 12 | 13 | 14 | .CODE PASS1_TEXT 15 | 16 | EXTERNDEF _release_io_segment:proc,_close_handle:proc 17 | externdef _release_myi_ptr:proc, _close_myi_handle:proc 18 | 19 | 20 | RELEASE_MYI_PTR PROC 21 | push EAX 22 | call _release_myi_ptr 23 | add ESP,4 24 | ret 25 | 26 | ; 27 | ;EAX IS MYI_STUFF 28 | ; 29 | ASSUME EAX:PTR MYI_STRUCT 30 | 31 | XOR EDX,EDX 32 | MOV ECX,[EAX].MYI_BLOCK 33 | 34 | MOV [EAX].MYI_BLOCK,EDX 35 | MOV [EAX].MYI_PTRA,EDX 36 | 37 | TEST ECX,ECX 38 | JZ L91$ 39 | 40 | MOV EAX,ECX 41 | 42 | push ECX 43 | push EDX 44 | push EAX 45 | call _release_io_segment 46 | add ESP,4 47 | pop EDX 48 | pop ECX 49 | L91$: 50 | RET 51 | 52 | RELEASE_MYI_PTR ENDP 53 | 54 | 55 | 56 | ; PUBLIC CLOSE_MYI_HANDLE 57 | 58 | CLOSE_MYI_HANDLE PROC 59 | push EAX 60 | call _close_myi_handle 61 | add ESP,4 62 | ret 63 | ; 64 | ;EAX IS MYI_STUFF 65 | ; 66 | XOR EDX,EDX 67 | MOV ECX,[EAX].MYI_HANDLE 68 | 69 | MOV [EAX].MYI_HANDLE,EDX 70 | MOV LAST_FILENAME_GINDEX,EDX 71 | 72 | TEST ECX,ECX 73 | JZ L92$ 74 | 75 | push ECX 76 | call _close_handle 77 | add ESP,4 78 | 79 | L92$: 80 | RET 81 | 82 | CLOSE_MYI_HANDLE ENDP 83 | 84 | END 85 | 86 | -------------------------------------------------------------------------------- /subs/myisc.c: -------------------------------------------------------------------------------- 1 | 2 | #include "all.h" 3 | 4 | void _release_myi_ptr(MYI_STRUCT *EAX) 5 | { 6 | void *ECX = EAX->MYI_BLOCK; 7 | EAX->MYI_BLOCK = 0; 8 | EAX->MYI_PTRA = 0; 9 | if (ECX) 10 | _release_io_segment(ECX); 11 | } 12 | 13 | void _close_myi_handle(MYI_STRUCT *EAX) 14 | { 15 | void *ECX = EAX->MYI_HANDLE; 16 | EAX->MYI_HANDLE = 0; 17 | LAST_FILENAME_GINDEX = 0; 18 | 19 | if (ECX) 20 | _close_handle(ECX); 21 | } 22 | 23 | -------------------------------------------------------------------------------- /subs/ovlterm.asm: -------------------------------------------------------------------------------- 1 | TITLE 2 | 3 | PUBLIC $$SLR_OVL_TERM 4 | 5 | CODE SEGMENT 'CODE' 6 | 7 | $$SLR_OVL_TERM PROC FAR 8 | 9 | RET 10 | 11 | $$SLR_OVL_TERM ENDP 12 | 13 | CODE ENDS 14 | 15 | END 16 | 17 | -------------------------------------------------------------------------------- /subs/perform.asm: -------------------------------------------------------------------------------- 1 | TITLE PERFORM 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC PERFORM_VERIFY_A,PERFORM_VERIFY_B 6 | 7 | 8 | .CODE MIDDLE_TEXT 9 | 10 | PERFORM_VERIFY_A PROC 11 | ; 12 | ; 13 | ; 14 | RET 15 | 16 | PERFORM_VERIFY_A ENDP 17 | 18 | PERFORM_VERIFY_B EQU PERFORM_VERIFY_A 19 | 20 | END 21 | 22 | -------------------------------------------------------------------------------- /subs/putdata.asm: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /subs/relexe_5.asm: -------------------------------------------------------------------------------- 1 | TITLE RELEXE_5 - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC RELEASE_EXETABLE_5,RELEASE_EXETABLE_ALL 6 | 7 | 8 | .DATA 9 | 10 | EXTERNDEF EXETABLE:DWORD 11 | 12 | 13 | .CODE PASS2_TEXT 14 | 15 | EXTERNDEF RELEASE_BLOCK:PROC 16 | 17 | 18 | RELEASE_EXETABLE_5 PROC 19 | ; 20 | ; 21 | ; 22 | PUSH EBX 23 | MOV EBX,OFF EXETABLE 24 | 25 | MOV ECX,64K/PAGE_SIZE+1 26 | L1$: 27 | XOR EDX,EDX 28 | MOV EAX,[EBX] 29 | 30 | MOV [EBX],EDX 31 | ADD EBX,4 32 | 33 | TEST EAX,EAX 34 | JZ L2$ 35 | 36 | CALL RELEASE_BLOCK 37 | L2$: 38 | DEC ECX 39 | JNZ L1$ 40 | 41 | POP EBX 42 | 43 | RET 44 | 45 | RELEASE_EXETABLE_5 ENDP 46 | 47 | 48 | RELEASE_EXETABLE_ALL PROC 49 | ; 50 | ; 51 | ; 52 | PUSH EBX 53 | MOV EBX,OFF EXETABLE 54 | L1$: 55 | MOV ECX,4 56 | L2$: 57 | XOR EDX,EDX 58 | MOV EAX,[EBX] 59 | 60 | MOV [EBX],EDX 61 | ADD EBX,4 62 | 63 | TEST EAX,EAX 64 | JZ L3$ 65 | 66 | CALL RELEASE_BLOCK 67 | JMP L1$ 68 | 69 | L3$: 70 | DEC ECX 71 | JNZ L2$ 72 | 73 | POP EBX 74 | 75 | RET 76 | 77 | RELEASE_EXETABLE_ALL ENDP 78 | 79 | 80 | END 81 | 82 | -------------------------------------------------------------------------------- /subs/set_outf.asm: -------------------------------------------------------------------------------- 1 | TITLE SET_OUTF - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | INCLUDE IO_STRUC 5 | INCLUDE SECTIONS 6 | 7 | PUBLIC SET_OUTFILE 8 | 9 | 10 | .DATA 11 | 12 | EXTERNDEF _OUTFILE_GINDEX:DWORD,CURN_OUTFILE_GINDEX:DWORD 13 | 14 | EXTERNDEF OUTFILE_GARRAY:STD_PTR_S 15 | 16 | 17 | .CODE PASS2_TEXT 18 | 19 | 20 | SET_OUTFILE PROC 21 | ; 22 | ;EAX IS SECTION PHYSICAL 23 | ; 24 | MOV ECX,_OUTFILE_GINDEX 25 | 26 | MOV [EAX].SECTION_STRUCT._SECT_OUTFILE_GINDEX,ECX 27 | 28 | CONVERT ECX,ECX,OUTFILE_GARRAY 29 | 30 | INC [ECX].OUTFILE_STRUCT._OF_SECTIONS 31 | 32 | RET 33 | 34 | SET_OUTFILE ENDP 35 | 36 | 37 | END 38 | 39 | -------------------------------------------------------------------------------- /subs/tptrvptr.asm: -------------------------------------------------------------------------------- 1 | TITLE TPTRVPTR 2 | 3 | INCLUDE MACROS 4 | 5 | PUBLIC MAKE_TPTR_LINDEX 6 | 7 | 8 | .DATA 9 | 10 | EXTERNDEF SYM_HASH_MOD:DWORD 11 | 12 | EXTERNDEF LNAME_LARRAY:LARRAY_STRUCT 13 | 14 | 15 | .CODE ROOT_TEXT 16 | 17 | EXTERNDEF ALLOC_LOCAL:PROC 18 | 19 | 20 | MAKE_TPTR_LINDEX PROC 21 | ; 22 | ;CONVERT EAX TO LINDEX 23 | ; 24 | PUSH ESI 25 | MOV ESI,EAX 26 | ASSUME ESI:PTR TPTR_STRUCT 27 | 28 | MOV EAX,[EAX].TPTR_STRUCT._TP_LENGTH 29 | PUSH EDI 30 | 31 | ADD EAX,SIZE TPTR_STRUCT+SIZE PRETEXT_PTR_STRUCT-3 ; 32 | CALL ALLOC_LOCAL ;ES:DI IS PHYS, AX LOG 33 | 34 | LEA EDX,[EAX+4] 35 | LEA EAX,[EAX+4] 36 | 37 | INSTALL_POINTER_LINDEX LNAME_LARRAY 38 | 39 | XOR ECX,ECX ;PTR TO MYCOMDAT STRUCTURE 40 | MOV EAX,SYM_HASH_MOD ;MODULE # IF LOCAL 41 | 42 | MOV [EDX-4],ECX 43 | MOV ECX,[ESI]._TP_LENGTH 44 | ASSUME EDX:PTR TPTR_STRUCT 45 | 46 | MOV [EDX]._TP_FLAGS,EAX 47 | MOV [EDX]._TP_LENGTH,ECX 48 | 49 | SHR ECX,2 50 | MOV EAX,[ESI]._TP_HASH 51 | 52 | INC ECX 53 | MOV [EDX]._TP_HASH,EAX 54 | 55 | LEA ESI,[ESI]._TP_TEXT 56 | LEA EDI,[EDX]._TP_TEXT 57 | 58 | OPTI_MOVSD 59 | 60 | POPM EDI,ESI 61 | 62 | MOV EAX,LNAME_LARRAY._LARRAY_LIMIT 63 | 64 | RET 65 | 66 | MAKE_TPTR_LINDEX ENDP 67 | 68 | 69 | END 70 | 71 | -------------------------------------------------------------------------------- /subs/xref.asm: -------------------------------------------------------------------------------- 1 | TITLE XREF - Copyright (c) SLR Systems 1994 2 | 3 | INCLUDE MACROS 4 | 5 | 6 | XREF_STRUCT STRUC 7 | 8 | STORE_PTR DD ? 9 | BYTES_LEFT DD ? 10 | BLOCK_BASE DD ? 11 | BLOCK_CNT DD ? 12 | 13 | XREF_STRUCT ENDS 14 | 15 | 16 | .DATA 17 | 18 | EXTERNDEF XR_CURNMOD_GINDEX:DWORD,LAST_XR_CURNMOD_GINDEX:DWORD,FIRST_XREF_BLK:DWORD 19 | 20 | 21 | .CODE ROOT_TEXT 22 | 23 | EXTERNDEF GET_NEW_LOG_BLK:PROC 24 | 25 | 26 | if fg_xref 27 | 28 | PUBLIC STORE_XREF_ENTRY,NEW_XREF_BLK_INIT 29 | 30 | 31 | STORE_XREF_ENTRY PROC 32 | ; 33 | ;EAX IS GINDEX TO STORE 34 | ; 35 | MOV ECX,XR_CURNMOD_GINDEX 36 | MOV EDX,LAST_XR_CURNMOD_GINDEX 37 | 38 | CMP ECX,EDX 39 | JNZ L1$ 40 | L3$: 41 | 42 | L2$ LABEL PROC 43 | 44 | MOV ECX,XREF_STRUCTURE.BYTES_LEFT ;COUNT BYTES LEFT 45 | MOV EDX,XREF_STRUCTURE.STORE_PTR ;STORAGE POINTER 46 | 47 | SUB ECX,4 48 | JZ L4$ 49 | 50 | MOV [EDX],EAX 51 | ADD EDX,4 52 | 53 | MOV XREF_STRUCTURE.BYTES_LEFT,ECX 54 | MOV XREF_STRUCTURE.STORE_PTR,EDX 55 | L5$: 56 | RET 57 | 58 | L1$: 59 | PUSH EAX 60 | MOV LAST_XR_CURNMOD_GINDEX,ECX 61 | 62 | MOV EAX,-1 63 | CALL L2$ 64 | 65 | MOV EAX,XR_CURNMOD_GINDEX 66 | CALL L2$ 67 | 68 | POP EAX 69 | JMP L3$ 70 | 71 | L4$: 72 | PUSH EAX 73 | MOV [EDX],EAX 74 | 75 | LEA EAX,[EDX+4] 76 | 77 | MOV ECX,OFF XREF_STRUCTURE 78 | ASSUME ECX:PTR XREF_STRUCT 79 | 80 | CALL NEW_XREF_BLK 81 | 82 | POP EAX 83 | RET 84 | 85 | STORE_XREF_ENTRY ENDP 86 | 87 | 88 | NEW_XREF_BLK PROC 89 | ; 90 | ;ALLOCATE ANOTHER 16K BLOCK FOR STORING XREF INFORMATION 91 | ; 92 | ;ESI IS PLACE TO STORE NEW BLOCK ADDRESS 93 | ;EBX IS XREF_STRUCTURE 94 | ; 95 | MOV EDX,EAX 96 | CALL GET_NEW_LOG_BLK ;GET LOGICAL BLOCK 97 | 98 | MOV [EDX],EAX 99 | MOV [ECX].STORE_PTR,EAX 100 | 101 | MOV [ECX].BLOCK_BASE,EAX 102 | 103 | INC [ECX].BLOCK_CNT 104 | MOV [ECX].BYTES_LEFT,PAGE_SIZE-4 105 | 106 | RET 107 | 108 | NEW_XREF_BLK ENDP 109 | 110 | 111 | NEW_XREF_BLK_INIT PROC 112 | 113 | MOV EAX,OFF FIRST_XREF_BLK 114 | MOV ECX,OFF XREF_STRUCTURE 115 | 116 | CALL NEW_XREF_BLK 117 | RET 118 | 119 | NEW_XREF_BLK_INIT ENDP 120 | 121 | 122 | .DATA? 123 | 124 | ALIGN 4 125 | 126 | XREF_STRUCTURE XREF_STRUCT<> 127 | 128 | endif 129 | 130 | END 131 | 132 | -------------------------------------------------------------------------------- /testall.bat: -------------------------------------------------------------------------------- 1 | start "test" /D\cbx\test /belownormal testall 2 | start "mars\test" /D\cbx\mars\test /belownormal testall 3 | start "testcpp" /D\cbx\testcpp /belownormal testall 4 | start "stltutorial" /D\cbx\stltutorial /belownormal testall 5 | start "thinking" /D\cbx\thinking /belownormal testall 6 | start "drdobbs" /D\cbx\drdobbs /belownormal testall 7 | 8 | -------------------------------------------------------------------------------- /x32/lib/slr.obj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/x32/lib/slr.obj -------------------------------------------------------------------------------- /x32/lib/x32v.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/x32/lib/x32v.lib -------------------------------------------------------------------------------- /x32/lib/zlx.lod: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DigitalMars/optlink/493de158282046641ef2a3a60a88e25e26d88ec4/x32/lib/zlx.lod --------------------------------------------------------------------------------