dvadura@watdragon.waterloo.edu (Dennis Vadura) (12/17/90)
Posting-number: Volume 15, Issue 93 Submitted-by: Dennis Vadura <dvadura@watdragon.waterloo.edu> Archive-name: dmake-3.6/patch04 #!/bin/sh # this is part 4 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # file dm36.p1 continued # CurArch=4 if test ! -r s2_seq_.tmp then echo "Please unpack part 1 first!" exit 1; fi ( read Scheck if test "$Scheck" != $CurArch then echo "Please unpack part $Scheck next!" exit 1; else exit 0; fi ) < s2_seq_.tmp || exit 1 sed 's/^X//' << 'SHAR_EOF' >> dm36.p1 XX*************** XX*** 34,39 **** XX--- 34,46 ---- XX * XX */ XX XX+ #if defined (_MSC_VER) XX+ # if _MSC_VER < 500 XX+ Force a compile-time blowup. XX+ Do not define define _MSC_VER for MSC compilers ealier than 5.0. XX+ # endif XX+ #endif XX+ XX /* define this for configurations that don't have the coreleft function XX * so that the code compiles. To my knowledge coreleft exists only on XX * Turbo C, but it is needed here since the function is used in many debug XX*************** XX*** 48,57 **** XX # define SIGTERM SIGINT XX #endif XX XX! /* Fixes unimplemented line buffering for MSC XX * MSC _IOLBF is the same as _IOFBF XX- * This redefinition causes the following warning, but ignore it XX- * c:/usr/include/stdio.h(129) : warning C4005: '_IOLBF' : macro redefinition XX */ XX #if defined(MSDOS) && defined (_MSC_VER) XX # undef _IOLBF XX--- 55,62 ---- XX # define SIGTERM SIGINT XX #endif XX XX! /* Fixes unimplemented line buffering for MSC 5.x and 6.0. XX * MSC _IOLBF is the same as _IOFBF XX */ XX #if defined(MSDOS) && defined (_MSC_VER) XX # undef _IOLBF XX*************** XX*** 59,65 **** XX #endif XX XX /* in alloc.h: size_t is redefined XX! * defined in stdio.h which is included alloc.h XX */ XX #if defined(MSDOS) && defined (_MSC_VER) XX # define _TYPES_ XX--- 64,70 ---- XX #endif XX XX /* in alloc.h: size_t is redefined XX! * defined in stdio.h which is included by alloc.h XX */ XX #if defined(MSDOS) && defined (_MSC_VER) XX # define _TYPES_ XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/msdos/exec.h Sat Oct 6 12:05:40 1990 XX--- msdos/exec.h Sun Oct 28 23:16:16 1990 XX*************** XX*** 9,16 **** XX #endif XX #endif XX XX! extern int exec ANSI((int, char far *, char far *, unsigned int, XX! unsigned int, char far *)); XX XX #ifndef MK_FP XX #define MK_FP(seg,ofs) \ XX--- 9,15 ---- XX #endif XX #endif XX XX! extern int exec ANSI((int, char far *, char far *, unsigned int, char far *)); XX XX #ifndef MK_FP XX #define MK_FP(seg,ofs) \ XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/msdos/exec.asm Sat Oct 6 12:05:50 1990 XX--- msdos/exec.asm Sun Oct 28 23:16:15 1990 XX*************** XX*** 1,6 **** XX! ; You must assemble this file with masm (or tasm) flag XX! ; /dmmodel where model is one of {small, compact, medium, large} XX ; XX ifdef msmall XX .model small XX argbase equ 4 XX--- 1,44 ---- XX! ; SYNOPSIS XX! ; Exec code for the swapping version of DOS spawn. XX! ; XX! ; DESCRIPTION XX! ; This code is a model independent version of DOS exec that will swap XX! ; the calling process out to secondary storage prior to running the XX! ; child. The prototype for calling the exec function is below. XX ; XX+ ; exec( int swap, char far *program, char far *cmdtail, XX+ ; int environment_seg, int env_size, char far *tmpfilename ); XX+ ; XX+ ; XX+ ; To assemble this file issue the command: XX+ ; XX+ ; tasm /mx /t /dmmodel exec.asm XX+ ; XX+ ; where 'model' is one of {small, compact, medium, large}, you may XX+ ; also use MASM 5.1 to assemble this file, in this case simply replace XX+ ; 'tasm' with 'masm' in the above command line. XX+ ; XX+ ; AUTHOR XX+ ; Dennis Vadura, dvadura@watdragon.uwaterloo.ca XX+ ; CS DEPT, University of Waterloo, Waterloo, Ont., Canada XX+ ; XX+ ; COPYRIGHT XX+ ; Copyright (c) 1990 by Dennis Vadura. All rights reserved. XX+ ; XX+ ; This program is free software; you can redistribute it and/or XX+ ; modify it under the terms of the GNU General Public License XX+ ; (version 1), as published by the Free Software Foundation, and XX+ ; found in the file 'LICENSE' included with this distribution. XX+ ; XX+ ; This program is distributed in the hope that it will be useful, XX+ ; but WITHOUT ANY WARRANTY; without even the implied warrant of XX+ ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the XX+ ; GNU General Public License for more details. XX+ ; XX+ ; You should have received a copy of the GNU General Public License XX+ ; along with this program; if not, write to the Free Software XX+ ; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. XX+ ; XX ifdef msmall XX .model small XX argbase equ 4 XX*************** XX*** 21,28 **** XX a_prog equ <bp+argbase+2> XX a_tail equ <bp+argbase+6> XX a_env equ <bp+argbase+10> XX! a_esiz equ <bp+argbase+12> XX! a_tmp equ <bp+argbase+14> XX XX XX ; Define all useful equ's XX--- 59,65 ---- XX a_prog equ <bp+argbase+2> XX a_tail equ <bp+argbase+6> XX a_env equ <bp+argbase+10> XX! a_tmp equ <bp+argbase+12> XX XX XX ; Define all useful equ's XX*************** XX*** 49,57 **** XX old_ss dw ? ; save stack seg across exec XX old_sp dw ? ; save stack ptr across exec XX progsize dw ? ; original size of the program XX resend dw ? ; paragraph where resident code ends XX envseg dw ? ; paragraph of environment segment XX- envsize dw ? ; length of environment in paragraphs XX psp dw ? ; our own psp XX swap dw ? ; swapping selection flag XX retcode dw ? ; return code from exec XX--- 86,94 ---- XX old_ss dw ? ; save stack seg across exec XX old_sp dw ? ; save stack ptr across exec XX progsize dw ? ; original size of the program XX+ rootsize dw ? ; size of base root kept during swap XX resend dw ? ; paragraph where resident code ends XX envseg dw ? ; paragraph of environment segment XX psp dw ? ; our own psp XX swap dw ? ; swapping selection flag XX retcode dw ? ; return code from exec XX*************** XX*** 126,132 **** XX ; First define the critical-error and control-brk handlers. XX ; The critical error handler simply pops the machine state and returns an XX ; access denied result code. XX! crit_err_handler proc near XX add sp, 6 ; ip/cs/flags ... XX pop ax XX pop bx XX--- 163,169 ---- XX ; First define the critical-error and control-brk handlers. XX ; The critical error handler simply pops the machine state and returns an XX ; access denied result code. XX! crit_err_handler proc far XX add sp, 6 ; ip/cs/flags ... XX pop ax XX pop bx XX*************** XX*** 150,174 **** XX XX ;----------------------------------------------------------------------------- XX ; Here we set the interrupted flag, and terminate the currently running XX! ; ess. proc XX! ctl_brk_handler proc near XX inc cs:interrupted ; set the flag XX XX ; Make certain it isn't us that is going to get terminated. XX ; There is a small window where the in_exec flag is set but the child is XX ; not running yet, I assume that DOS doesn't test for ctl_brk at that time XX! ; as it is bussily creating a new ess. proc XX cmp cs:in_exec,0 XX! je just_return XX! mov ax, 04cffH ; stop the sucker! XX! int 21H XX! just_return: ret XX ctl_brk_handler endp XX XX XX ;----------------------------------------------------------------------------- XX ; Something really nasty happened, so abort the exec call and exit. XX! ; This kills the calling ess proc altogether, and is a very nasty way of XX ; termination since files may still be open etc. XX abort_exec_rhdr label near XX mov dx, offset error_rhdr XX--- 187,211 ---- XX XX ;----------------------------------------------------------------------------- XX ; Here we set the interrupted flag, and terminate the currently running XX! ; process. XX! ctl_brk_handler proc far XX! clc ; make sure carry is clear XX inc cs:interrupted ; set the flag XX XX ; Make certain it isn't us that is going to get terminated. XX ; There is a small window where the in_exec flag is set but the child is XX ; not running yet, I assume that DOS doesn't test for ctl_brk at that time XX! ; as it is bussily creating a new process. XX cmp cs:in_exec,0 XX! je just_return ; note this implies CF == 0 XX! stc ; set CF to abort child XX! just_return: iret XX ctl_brk_handler endp XX XX XX ;----------------------------------------------------------------------------- XX ; Something really nasty happened, so abort the exec call and exit. XX! ; This kills the calling process altogether, and is a very nasty way of XX ; termination since files may still be open etc. XX abort_exec_rhdr label near XX mov dx, offset error_rhdr XX*************** XX*** 187,196 **** XX jmp print_it XX abort_exec proc near XX mov dx, offset error_string XX! print_it: mov bx, [swap] XX call [free_resource+bx] XX mov ax, cs XX mov ds, ax XX mov ah, 9 XX int 21H XX kill_program: mov ax, 04cffH ; nuke it! XX--- 224,235 ---- XX jmp print_it XX abort_exec proc near XX mov dx, offset error_string XX! print_it: push dx XX! mov bx, [swap] XX call [free_resource+bx] XX mov ax, cs XX mov ds, ax XX+ pop dx XX mov ah, 9 XX int 21H XX kill_program: mov ax, 04cffH ; nuke it! XX*************** XX*** 402,408 **** XX ; - walk DOS allocation chain and write out all other segments owned by XX ; the current program that are contiguous with the _psp segment XX ; - copy the environment down to low memory XX! ; - resize the current _psp segment to savesize+envsize. XX ; - free all segments belonging to program except current _psp segment XX swap_out proc near XX mov ax, 05800H ; get memory alocation strategy XX--- 441,447 ---- XX ; - walk DOS allocation chain and write out all other segments owned by XX ; the current program that are contiguous with the _psp segment XX ; - copy the environment down to low memory XX! ; - resize the current _psp segment to savesize XX ; - free all segments belonging to program except current _psp segment XX swap_out proc near XX mov ax, 05800H ; get memory alocation strategy XX*************** XX*** 427,432 **** XX--- 466,472 ---- XX add bx, ax ; bx is size of program to keep XX sub si, bx ; si is # of paragraphs to save. XX add di, bx ; di is paragraph to start at XX+ mov rootsize, bx XX mov resend, di ; cs:resend is saved start para XX mov al, seg_no_alloc ; set no allocation for segment XX call write_segment XX*************** XX*** 434,441 **** XX XX ; We have now saved the portion of the program segment that will not remain XX ; resident during the exec. We should now walk the DOS allocation chain and XX! ; write out all other segments owned by the current ess. proc XX! mov ax, [psp] XX dec ax XX mov es, ax XX mov bx, offset write_segment_data XX--- 474,481 ---- XX XX ; We have now saved the portion of the program segment that will not remain XX ; resident during the exec. We should now walk the DOS allocation chain and XX! ; write out all other segments owned by the current process. XX! save_segments: mov ax, [psp] XX dec ax XX mov es, ax XX mov bx, offset write_segment_data XX*************** XX*** 443,486 **** XX jc abort_swap_out XX XX ; Now we must walk the chain of allocated memory blocks again and free XX! ; all those that are owned by the current ess, proc except the one that is XX! ; the current ess' proc psp. XX! free_segments: mov es, [psp] XX mov bx, offset free_dos_segment XX call walk_arena_chain XX! jnc copy_environ XX jmp abort_exec_free ; can't fix it up now. XX XX! ; we have now written all segments that belong to the program to some XX! ; other resource. We can now copy the environment and resize the psp XX! ; segment. XX! copy_environ: mov ax, [envseg] ; get the environment segment XX! or ax, ax ; skip copy if it's null XX! je resize_program XX! push ds XX! push es XX! mov bx, [resend] ; here is where the environ goes XX! mov es, bx XX! mov cx, [envsize] XX! add bx, cx XX! sub bx, [psp] XX! mov [envsize], bx ; bx is size of program after XX! shl cx, 1 ; environ is copied. XX! shl cx, 1 XX! shl cx, 1 XX! shl cx, 1 XX! mov ds, ax ; ds:si is source address XX! xor si, si ; es:di is dest address XX! mov di, si ; cx is count in bytes. XX! call copy_data XX! mov [envseg], es ; point the envseg at the XX! pop es ; right spot XX! pop ds XX! XX! ; We now resize the program to the size specified by cs:envsize. This will XX! ; free the memory taken up by the current program segment. XX resize_program: mov es, [psp] ; es is segment to resize. XX! mov bx, [envsize] ; bx is size of segment. XX mov ah, 04aH ; resize memory block XX int 21H XX jnc swap_out_ok XX--- 483,502 ---- XX jc abort_swap_out XX XX ; Now we must walk the chain of allocated memory blocks again and free XX! ; all those that are owned by the current process, except the one that is XX! ; the current process' psp. XX! free_segments: mov ax, [psp] XX! dec ax XX! mov es,ax XX mov bx, offset free_dos_segment XX call walk_arena_chain XX! jnc resize_program XX jmp abort_exec_free ; can't fix it up now. XX XX! ; We now resize the program to the size specified by cs:rootsize. This will XX! ; free most of the memory taken up by the current program segment. XX resize_program: mov es, [psp] ; es is segment to resize. XX! mov bx, [rootsize] ; bx is size of segment. XX mov ah, 04aH ; resize memory block XX int 21H XX jnc swap_out_ok XX*************** XX*** 513,530 **** XX no_swap_out: cmp [interrupted], 0 ; were we interrupted? XX jne leave_exec ; yep, so clean up, don't exec XX XX ; set up the parameter block for the DOS exec call. XX ; offset contents XX ; 00 segment address of environment to be passed, XX ; 0 => use parents env. XX! ; 02 pointer to command tail for new ess. proc XX ; 06 pointer to fcb1 XX ; 0a pointer to fcb2 XX mov cx, cs XX mov [word ptr ex_cmdtail], offset cmdtail XX mov [word ptr ex_cmdtail+2], cx XX- mov ax, [envseg] XX- mov [ex_envseg], ax XX XX ; set up registers for exec call XX ; ds:dx - pointer to pathname of program to execute XX--- 529,557 ---- XX no_swap_out: cmp [interrupted], 0 ; were we interrupted? XX jne leave_exec ; yep, so clean up, don't exec XX XX+ ; free passed in environment block if it is non zero. XX+ ; This way the parent program does not need to free it. XX+ mov ax, [envseg] XX+ or ax, ax XX+ je setup_block XX+ push ax XX+ mov es, ax XX+ mov ah, 49H XX+ int 21H XX+ pop ax XX+ XX ; set up the parameter block for the DOS exec call. XX ; offset contents XX ; 00 segment address of environment to be passed, XX ; 0 => use parents env. XX! ; 02 pointer to command tail for new process. XX ; 06 pointer to fcb1 XX ; 0a pointer to fcb2 XX+ setup_block: mov ax, [envseg] XX+ mov [ex_envseg], ax XX mov cx, cs XX mov [word ptr ex_cmdtail], offset cmdtail XX mov [word ptr ex_cmdtail+2], cx XX XX ; set up registers for exec call XX ; ds:dx - pointer to pathname of program to execute XX*************** XX*** 560,574 **** XX cbw XX mov [retcode], ax XX XX! leave_exec: mov [in_exec], 0 ; all done, reset in_exec flag XX! cmp [swap], 0 ; check swap, if non-zero swap back in XX je no_swap_in XX call swap_in XX- no_swap_in: ret XX- do_exec endp XX XX XX XX ;============================================================================== XX ; Everything past this point is overwriten with the environment and new XX ; program after the currently executing program is swapped out. XX--- 587,605 ---- XX cbw XX mov [retcode], ax XX XX! leave_exec: cmp [swap], 0 ; check swap, if non-zero swap back in XX je no_swap_in XX call swap_in XX XX+ ; Clear the in_exec after the swap back in. This way we are guaranteed to XX+ ; get parent in and the resources freed should a ^C be hit when we are reading XX+ ; the image in. XX+ no_swap_in: mov [in_exec], 0 XX+ ret XX+ do_exec endp XX XX XX+ XX ;============================================================================== XX ; Everything past this point is overwriten with the environment and new XX ; program after the currently executing program is swapped out. XX*************** XX*** 596,602 **** XX XX XX ;----------------------------------------------------------------------------- XX! ; This routine is used to walk the DOS alocated memory block chain and, XX ; starting at address supplied in the es register. For each block it XX ; calls the routine specified by the bx register with the segment length XX ; in si, and it's address in di. It does not apply the routine to the XX--- 627,633 ---- XX XX XX ;----------------------------------------------------------------------------- XX! ; This routine is used to walk the DOS allocated memory block chain XX ; starting at address supplied in the es register. For each block it XX ; calls the routine specified by the bx register with the segment length XX ; in si, and it's address in di. It does not apply the routine to the XX*************** XX*** 612,625 **** XX mov di, es XX inc di XX mov ax, word ptr es:1 XX cmp ax, cs:psp ; is it owned by us? XX jne walk_done ; NOPE! -- all done XX! cmp di, cs:psp ; make sure we don't XX! je next_block ; touch our psp XX push di XX push si XX push bx XX! call bx ; handle the segment XX pop bx XX pop si XX pop di XX--- 643,663 ---- XX mov di, es XX inc di XX mov ax, word ptr es:1 XX+ XX+ ; Stop the search if the block is NOT owned by us. Ignore our own psp block XX+ ; and our environment segment block. XX cmp ax, cs:psp ; is it owned by us? XX jne walk_done ; NOPE! -- all done XX! cmp di, cs:envseg ; skip our environment XX! je next_block XX! cmp di, cs:psp ; skip our psp XX! je next_block XX! XX! ; Now save state and call the routine pointed at by [bx]. XX push di XX push si XX push bx XX! call bx XX pop bx XX pop si XX pop di XX*************** XX*** 818,825 **** XX ; This is the main entry routine into the swap code and corresponds to the XX ; following C function call: XX ; XX! ; exec( int swap, char far *program, char far *cmdtail, XX! ; int environment_seg, int env_size, char far *tmpfilename ); XX ; XX ; Exec performs the following: XX ; 1. set up the local code segment copies of arguments to the exec call. XX--- 856,863 ---- XX ; This is the main entry routine into the swap code and corresponds to the XX ; following C function call: XX ; XX! ; exec( int swap, char far *program, char far *cmdtail, int environment_seg, XX! ; char far *tmpfilename ); XX ; XX ; Exec performs the following: XX ; 1. set up the local code segment copies of arguments to the exec call. XX*************** XX*** 827,839 **** XX ; stack. XX ; 3. save old interrupt vectors for ctrl-brk. XX ; 4. install our own handler for the ctrl-brk interrupt, our handler XX! ; terminates the current running ess, proc and returns with non-zero XX ; status code. XX ; 5. get our psp XX ; 6. setup arguments for exec call XX ; 7. exec the program, save result code on return. XX ; 8. restore previous ctrl-brk and crit-error handler. XX! ; 9. restore previous ess proc stack, and segment registers. XX ; 10. return from exec with child result code in AX XX ; and global _Interrupted flag set to true if child execution was XX ; interrupted. XX--- 865,877 ---- XX ; stack. XX ; 3. save old interrupt vectors for ctrl-brk. XX ; 4. install our own handler for the ctrl-brk interrupt, our handler XX! ; terminates the current running process, and returns with non-zero XX ; status code. XX ; 5. get our psp XX ; 6. setup arguments for exec call XX ; 7. exec the program, save result code on return. XX ; 8. restore previous ctrl-brk and crit-error handler. XX! ; 9. restore previous process stack, and segment registers. XX ; 10. return from exec with child result code in AX XX ; and global _Interrupted flag set to true if child execution was XX ; interrupted. XX*************** XX*** 862,869 **** XX mov es:swap, ax XX mov ax, ss:[a_env] ; save env seg to use XX mov es:envseg, ax XX- mov ax, ss:[a_esiz] ; get environment's size XX- mov es:envsize, ax XX XX mov di, offset cs:cmdpath ; copy the command XX lds si, ss:[a_prog] ; 65 bytes worth XX--- 900,905 ---- XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/msdos/config.mk Thu Oct 4 09:24:52 1990 XX--- msdos/config.mk Sun Oct 28 23:16:14 1990 XX*************** XX*** 6,12 **** XX XX # Memory model to compile for XX # set to s - small, m - medium, c - compact, l - large XX! MODEL = c XX XX STARTUPFILE = $(OS)/startup.mk XX XX--- 6,16 ---- XX XX # Memory model to compile for XX # set to s - small, m - medium, c - compact, l - large XX! .IF $(DEBUG) XX! MODEL = l XX! .ELSE XX! MODEL = c XX! .END XX XX STARTUPFILE = $(OS)/startup.mk XX XX*************** XX*** 18,25 **** XX LDTMPLIB = <+$(LDLIBS:s,/,\\,:t"+\n")\n+> XX XX # Debug flags XX! DB_CFLAGS = -DDBUG -v XX! DB_LDFLAGS = /v XX DB_LDLIBS = XX XX # NO Debug flags XX--- 22,29 ---- XX LDTMPLIB = <+$(LDLIBS:s,/,\\,:t"+\n")\n+> XX XX # Debug flags XX! DB_CFLAGS = -DDBUG XX! DB_LDFLAGS = XX DB_LDLIBS = XX XX # NO Debug flags XX*************** XX*** 31,38 **** XX CFLAGS += -I$(OS) XX XX # Common MSDOS source files. XX! # Define NOSWAP to non-null for the swap code to be excluded on making. XX! .IF $(NOSWAP) == $(NULL) XX SWP_SRC = find.c spawn.c XX ASRC += exec.asm XX .END XX--- 35,44 ---- XX CFLAGS += -I$(OS) XX XX # Common MSDOS source files. XX! # Define SWAP to anything but 'y' for the swap code to be excluded on making. XX! # Swapping for DOS versions is enabled by default. XX! SWAP *= y XX! .IF $(SWAP) == y XX SWP_SRC = find.c spawn.c XX ASRC += exec.asm XX .END XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/msdos/arlib.c Sat Oct 6 12:05:18 1990 XX--- msdos/arlib.c Mon Oct 22 16:53:32 1990 XX*************** XX*** 1,4 **** XX! /* RCS -- $Header: /u2/dvadura/src/generic/dmake/src/msdos/RCS/arlib.c,v 1.1 90/10/06 12:05:19 dvadura Exp $ XX -- SYNOPSIS -- Library access code. XX -- XX -- DESCRIPTION XX--- 1,4 ---- XX! /* RCS -- $Header: /u2/dvadura/src/generic/dmake/src/msdos/RCS/arlib.c,v 1.1 90/10/06 12:05:19 dvadura Exp Locker: dvadura $ XX -- SYNOPSIS -- Library access code. XX -- XX -- DESCRIPTION XX*************** XX*** 35,41 **** XX XX #include "extern.h" XX #include "stdmacs.h" XX- #include "vextern.h" XX XX time_t XX seek_arch(name, lib) XX--- 35,40 ---- XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/man/dmake.tf Sat Oct 6 12:05:02 1990 XX--- man/dmake.tf Sun Oct 28 13:26:42 1990 XX*************** XX*** 3,15 **** XX .ds TB "0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.5i +0.5i +2.0i XX .de Ip XX .fi XX! .nr Ip \w\\$1 XX .IP "\\$1" \\n(Ipu XX \\$2 XX .nf XX .. XX .de Is XX! .nr )I \w\\$1u XX .. XX .de Ii XX .in \\n()Ru XX--- 3,15 ---- XX .ds TB "0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.2i +0.5i +0.5i +2.0i XX .de Ip XX .fi XX! .nr Ip \w'\\$1 ' XX .IP "\\$1" \\n(Ipu XX \\$2 XX .nf XX .. XX .de Is XX! .nr )I \w'\\$1'u XX .. XX .de Ii XX .in \\n()Ru XX*************** XX*** 50,57 **** XX .B -f XX flag then \fBdmake\fR uses standard input as the source of the makefile text. XX .PP XX! Any macro definitions (arguments with embedded XX! .Q "=" XX signs) that appear on the command line are processed first XX and supercede definitions for macros of the same name found XX within the makefile. In general it is impossible for definitions found XX--- 50,56 ---- XX .B -f XX flag then \fBdmake\fR uses standard input as the source of the makefile text. XX .PP XX! Any macro definitions (arguments with embedded "=" XX signs) that appear on the command line are processed first XX and supercede definitions for macros of the same name found XX within the makefile. In general it is impossible for definitions found XX*************** XX*** 77,85 **** XX section found at the end of this document. XX .SH OPTIONS XX .IP "\fB\-A\fR" XX! Enable AUGMAKE special inference rule transformations (see the XX! .Q "PERCENT(%) RULES" XX! section), these are set to off by default. XX .IP "\fB\-e\fR" XX Read the environment and define all strings of the XX form '\fBENV-VAR\fP=\fIevalue\fP' XX--- 76,83 ---- XX section found at the end of this document. XX .SH OPTIONS XX .IP "\fB\-A\fR" XX! Enable AUGMAKE special inference rule transformations XX! (see the "PERCENT(%) RULES" section), these are set to off by default. XX .IP "\fB\-e\fR" XX Read the environment and define all strings of the XX form '\fBENV-VAR\fP=\fIevalue\fP' XX*************** XX*** 120,128 **** XX (useful for debugging, but cannot be re-read by \fBdmake\fP) XX .IP "\fB\-P#\fR" XX On systems that support multi-processing cause \fBdmake\fP to use \fI#\fP XX! concurrent child processes to make targets. See the XX! .Q "MULTI PROCESSING" XX! section for more information. XX .IP "\fB\-q\fR" XX Check and see if the target is up to date. Exits with code 0 if up to date, XX 1 otherwise. XX--- 118,125 ---- XX (useful for debugging, but cannot be re-read by \fBdmake\fP) XX .IP "\fB\-P#\fR" XX On systems that support multi-processing cause \fBdmake\fP to use \fI#\fP XX! concurrent child processes to make targets. XX! See the "MULTI PROCESSING" section for more information. XX .IP "\fB\-q\fR" XX Check and see if the target is up to date. Exits with code 0 if up to date, XX 1 otherwise. XX*************** XX*** 718,724 **** XX Thus using another example we have: XX .RS XX .sp XX! .Is "test/{ f1 ""f2"" """" }.o " XX .Ii "test/{f1 f2}.o" XX --> test/f1.o test/f2.o XX .Ii "test/ {f1 f2}.o" XX--- 715,721 ---- XX Thus using another example we have: XX .RS XX .sp XX! .Is "test/{ f1 f2 }.o " XX .Ii "test/{f1 f2}.o" XX --> test/f1.o test/f2.o XX .Ii "test/ {f1 f2}.o" XX*************** XX*** 725,732 **** XX --> test/ f1.o f2.o XX .Ii "test/{f1 f2} .o" XX --> test/f1 test/f2 .o XX! .Ii "test/{ f1 ""f2"" """" }.o" XX! --> test/f1.o test/f2.o test/.o XX .sp XX .Ii and XX .sp XX--- 722,729 ---- XX --> test/ f1.o f2.o XX .Ii "test/{f1 f2} .o" XX --> test/f1 test/f2 .o XX! .Ii "test/{ "f1" """" }.o" XX! --> test/f1.o test/.o XX .sp XX .Ii and XX .sp XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/man/dmake.p Sat Oct 6 12:26:44 1990 XX--- man/dmake.p Sun Oct 28 13:27:42 1990 XX*************** XX*** 869,879 **** XX A null token in the token list is specified using "". Thus XX using another example we have: XX XX! test/{f1 f2}.o --> test/f1.o test/f2.o XX! test/ {f1 f2}.o --> test/ f1.o f2.o XX! test/{f1 f2} .o --> test/f1 test/f2 .o XX! test/{ f1 "f2" "" }.o --> test/f1.o test/f2.o XX! test/.o XX XX and XX XX--- 869,878 ---- XX A null token in the token list is specified using "". Thus XX using another example we have: XX XX! test/{f1 f2}.o --> test/f1.o test/f2.o XX! test/ {f1 f2}.o --> test/ f1.o f2.o XX! test/{f1 f2} .o --> test/f1 test/f2 .o XX! test/{ --> test/f1.o test/.o XX XX and XX XX*************** XX*** 890,895 **** XX--- 889,895 ---- XX dencies. Such entries are called _t_a_r_g_e_t_/_p_r_e_r_e_q_u_i_s_i_t_e or XX _r_u_l_e definitions. Each rule definition is optionally fol- XX lowed by a set of lines that provide a recipe for updating XX+ any targets defined by the rule. Whenever ddmmaakkee attempts to XX XX XX XX*************** XX*** 902,908 **** XX XX XX XX- any targets defined by the rule. Whenever ddmmaakkee attempts to XX bring a target up to date and an explicit recipe is provided XX with a rule defining the target, that recipe is used to XX update the target. A rule definition begins with a line XX--- 902,907 ---- XX*************** XX*** 954,959 **** XX--- 953,959 ---- XX XX -- says to clear the previous list of prerequisites before XX adding the new prerequisites. Thus, XX+ XX XX XX XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/man/dmake.nc Sat Oct 6 12:26:46 1990 XX--- man/dmake.nc Mon Oct 29 20:29:13 1990 XX*************** XX*** 869,879 **** XX A null token in the token list is specified using "". Thus XX using another example we have: XX XX! test/{f1 f2}.o --> test/f1.o test/f2.o XX! test/ {f1 f2}.o --> test/ f1.o f2.o XX! test/{f1 f2} .o --> test/f1 test/f2 .o XX! test/{ f1 "f2" "" }.o --> test/f1.o test/f2.o XX! test/.o XX XX and XX XX--- 869,878 ---- XX A null token in the token list is specified using "". Thus XX using another example we have: XX XX! test/{f1 f2}.o --> test/f1.o test/f2.o XX! test/ {f1 f2}.o --> test/ f1.o f2.o XX! test/{f1 f2} .o --> test/f1 test/f2 .o XX! test/{ --> test/f1.o test/.o XX XX and XX XX*************** XX*** 890,895 **** XX--- 889,895 ---- XX dencies. Such entries are called target/prerequisite or XX rule definitions. Each rule definition is optionally fol- XX lowed by a set of lines that provide a recipe for updating XX+ any targets defined by the rule. Whenever dmake attempts to XX XX XX XX*************** XX*** 902,908 **** XX XX XX XX- any targets defined by the rule. Whenever dmake attempts to XX bring a target up to date and an explicit recipe is provided XX with a rule defining the target, that recipe is used to XX update the target. A rule definition begins with a line XX--- 902,907 ---- XX*************** XX*** 954,959 **** XX--- 953,959 ---- XX XX - says to clear the previous list of prerequisites before XX adding the new prerequisites. Thus, XX+ XX XX XX XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/makefile.mk Tue Oct 9 21:19:30 1990 XX--- makefile.mk Tue Oct 30 13:24:08 1990 XX*************** XX*** 9,15 **** XX # XX # Valid values for the above macros are: XX # XX! # OS - unix, msdos XX # OSRELEASE - bsd43, sysvr3, 386ix XX # - tccdos, mscdos (valid only of OS == msdos) XX # OSENVIRONMENT - uw {valid for unix, bsd43 configuration only.} XX--- 9,15 ---- XX # XX # Valid values for the above macros are: XX # XX! # OS - unix, msdos, tos XX # OSRELEASE - bsd43, sysvr3, 386ix XX # - tccdos, mscdos (valid only of OS == msdos) XX # OSENVIRONMENT - uw {valid for unix, bsd43 configuration only.} XX*************** XX*** 153,162 **** XX # XX # dmake scripts -- makes all the script files at once. XX # XX! SH = $(@:s/swp-/-/:s,-,/,:s/scripts/${SCRIPTFILE}/:s/c60d/cd/) XX! MS = MAKESTARTUP=$(@:s/swp-/-/:s,-,/,:s/scripts/startup.mk/:s/c60d/cd/) XX XX! scripts: unix-scripts msdos-scripts XX XX # To add a new environment for UNIX, simply create the appropriate entry XX # in the style below for the macro which contains the OS, OSRELEASE and XX--- 153,164 ---- XX # XX # dmake scripts -- makes all the script files at once. XX # XX! SH_n = $(@:s/swp-/-/:s,-,/,:s/scripts/${SCRIPTFILE}/) XX! MS_n = MAKESTARTUP=$(@:s/swp-/-/:s,-,/,:s/scripts/startup.mk/) XX! SH = $(SH_n:s/c40d/cd/:s/c50d/cd/:s/c51d/cd/:s/c60d/cd/) XX! MS = $(MS_n:s/c40d/cd/:s/c50d/cd/:s/c51d/cd/:s/c60d/cd/) XX XX! scripts: unix-scripts atari-tos-scripts msdos-scripts XX XX # To add a new environment for UNIX, simply create the appropriate entry XX # in the style below for the macro which contains the OS, OSRELEASE and XX*************** XX*** 169,176 **** XX unix-386ix-scripts-flags = OS=unix OSRELEASE=386ix OSENVIRONMENT= XX unix-bsd43-uw-scripts-flags= OS=unix OSRELEASE=bsd43 OSENVIRONMENT=uw XX unix-bsd43-vf-scripts-flags= OS=unix OSRELEASE=bsd43 OSENVIRONMENT=vf XX XX! unix-scripts: clean XX $(MAKE) SCRIPTFILE=make.sh unix-bsd43-scripts XX $(MAKE) SCRIPTFILE=make.sh unix-bsd43-uw-scripts XX $(MAKE) SCRIPTFILE=make.sh unix-bsd43-vf-scripts XX--- 171,179 ---- XX unix-386ix-scripts-flags = OS=unix OSRELEASE=386ix OSENVIRONMENT= XX unix-bsd43-uw-scripts-flags= OS=unix OSRELEASE=bsd43 OSENVIRONMENT=uw XX unix-bsd43-vf-scripts-flags= OS=unix OSRELEASE=bsd43 OSENVIRONMENT=vf XX+ tos--scripts-flags = OS=tos OSRELEASE= OSENVIRONMENT= XX XX! unix-scripts .SWAP : clean XX $(MAKE) SCRIPTFILE=make.sh unix-bsd43-scripts XX $(MAKE) SCRIPTFILE=make.sh unix-bsd43-uw-scripts XX $(MAKE) SCRIPTFILE=make.sh unix-bsd43-vf-scripts XX*************** XX*** 178,185 **** XX $(MAKE) SCRIPTFILE=make.sh unix-sysvr1-scripts XX $(MAKE) SCRIPTFILE=make.sh unix-386ix-scripts XX XX! unix-%-scripts:; $(MAKECMD) -ns $(MS) $($@-flags) >$(SH) XX XX # We make the standard dos scripts here, but we have to go and fix up the XX # make.bat file since it contains names of temporary files for the response XX # files required by the linker. We need to also construct the response file XX--- 181,192 ---- XX $(MAKE) SCRIPTFILE=make.sh unix-sysvr1-scripts XX $(MAKE) SCRIPTFILE=make.sh unix-386ix-scripts XX XX! unix-%-scripts .SWAP :; $(MAKECMD) -ns $(MS) $($@-flags) >$(SH) XX! tos-%-scripts .SWAP :; $(MAKECMD) -ns $(MS) $($@-flags) >$(SH) XX XX+ atari-tos-scripts .SWAP : clean XX+ $(MAKE) SCRIPTFILE=make.sh tos--scripts XX+ XX # We make the standard dos scripts here, but we have to go and fix up the XX # make.bat file since it contains names of temporary files for the response XX # files required by the linker. We need to also construct the response file XX*************** XX*** 190,216 **** XX # unix environment, and then make certain that the fix-msdos-%-scripts target XX # performs the correct function for the new environment. XX msdos-cf = OS=msdos OSENVIRONMENT= XX! msdos-tccdos-scripts-flags = $(msdos-cf) OSRELEASE=tccdos NOSWAP=y XX msdos-tccdosswp-scripts-flags = $(msdos-cf) OSRELEASE=tccdos XX! msdos-mscdos-scripts-flags = $(msdos-cf) OSRELEASE=mscdos NOSWAP=y XX! msdos-msc60dos-scripts-flags= $(msdos-cf) OSRELEASE=mscdos NOSWAP=y MSC_VER=6.0 XX! msdos-mscdosswp-scripts-flags = $(msdos-cf) OSRELEASE=mscdos XX msdos-msc60dosswp-scripts-flags = $(msdos-cf) OSRELEASE=mscdos MSC_VER=6.0 XX XX! msdos-scripts: clean XX $(MAKE) SCRIPTFILE=mk.bat msdos-tccdos-scripts XX $(MAKE) SCRIPTFILE=mkswp.bat msdos-tccdosswp-scripts XX- $(MAKE) SCRIPTFILE=mk.bat msdos-mscdos-scripts XX- $(MAKE) SCRIPTFILE=mk60.bat msdos-msc60dos-scripts XX- $(MAKE) SCRIPTFILE=mkswp.bat msdos-mscdosswp-scripts XX- $(MAKE) SCRIPTFILE=mk60swp.bat msdos-msc60dosswp-scripts XX XX! msdos-%-scripts: XX $(MAKE) -nus $(MS) $($@-flags) >$(SH) XX $(MAKE) -s $(MAKEMACROS) $(MS) $($@-flags) fix-msdos-$*-scripts XX XX! MAPOBJ = $(*:s/tccdos/obj/:s/mscdos/obj/:s/msc60dos/obj60/).rsp XX! MAPLIB = $(*:s/tccdos/lib/:s/mscdos/lib/:s/msc60dos/lib60/).rsp XX OBJRSP = $(SH:s,fix/,,:s,${SCRIPTFILE},${MAPOBJ},) XX LIBRSP = $(SH:s,fix/,,:s,${SCRIPTFILE},${MAPLIB},) XX DOSOBJ = $(CSTARTUP) $(OBJDIR)/{$(OBJECTS)} XX--- 197,230 ---- XX # unix environment, and then make certain that the fix-msdos-%-scripts target XX # performs the correct function for the new environment. XX msdos-cf = OS=msdos OSENVIRONMENT= XX! msdos-tccdos-scripts-flags = $(msdos-cf) OSRELEASE=tccdos SWAP=n XX msdos-tccdosswp-scripts-flags = $(msdos-cf) OSRELEASE=tccdos XX! msdos-msc40dos-scripts-flags= $(msdos-cf) OSRELEASE=mscdos SWAP=n MSC_VER=4.0 XX! msdos-msc40dosswp-scripts-flags = $(msdos-cf) OSRELEASE=mscdos MSC_VER=4.0 XX! msdos-msc50dos-scripts-flags= $(msdos-cf) OSRELEASE=mscdos SWAP=n MSC_VER=5.0 XX! msdos-msc50dosswp-scripts-flags = $(msdos-cf) OSRELEASE=mscdos MSC_VER=5.0 XX! msdos-msc51dos-scripts-flags= $(msdos-cf) OSRELEASE=mscdos SWAP=n MSC_VER=5.1 XX! msdos-msc51dosswp-scripts-flags = $(msdos-cf) OSRELEASE=mscdos MSC_VER=5.1 XX! msdos-msc60dos-scripts-flags= $(msdos-cf) OSRELEASE=mscdos SWAP=n MSC_VER=6.0 XX msdos-msc60dosswp-scripts-flags = $(msdos-cf) OSRELEASE=mscdos MSC_VER=6.0 XX XX! msdos-scripts: clean tcc-scripts msc-scripts; XX! XX! tcc-scripts .SWAP : XX $(MAKE) SCRIPTFILE=mk.bat msdos-tccdos-scripts XX $(MAKE) SCRIPTFILE=mkswp.bat msdos-tccdosswp-scripts XX XX! msc-scripts .SWAP :! 40 50 51 60 XX! $(MAKE) SCRIPTFILE=mk$?.bat msdos-msc$?dos-scripts XX! $(MAKE) SCRIPTFILE=mk$?swp.bat msdos-msc$?dosswp-scripts XX! 40 50 51 60:; XX! XX! msdos-%-scripts .SWAP : XX $(MAKE) -nus $(MS) $($@-flags) >$(SH) XX $(MAKE) -s $(MAKEMACROS) $(MS) $($@-flags) fix-msdos-$*-scripts XX XX! MAPOBJ = obj$(SWAP:s/y/swp/:s/n//).rsp XX! MAPLIB = lib$(SWAP:s/y/swp/:s/n//).rsp XX OBJRSP = $(SH:s,fix/,,:s,${SCRIPTFILE},${MAPOBJ},) XX LIBRSP = $(SH:s,fix/,,:s,${SCRIPTFILE},${MAPLIB},) XX DOSOBJ = $(CSTARTUP) $(OBJDIR)/{$(OBJECTS)} XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/makefile Sat Oct 6 12:04:34 1990 XX--- makefile Tue Oct 30 13:23:40 1990 XX*************** XX*** 12,35 **** XX @echo " make bsd43vf - Generic BSD 4.3 that needs vfprintf" XX @echo " make sysvr3 - Generic SysV R3 UNIX" XX @echo " make sysvr1 - Generic SysV R1 UNIX" XX- @echo " make 386ix - 386/ix (SysV R3) [NOTE: not tested]" XX @echo " make dynix - Sequent DYNIX system" XX @echo " make ultrix - Ultrix 3.0 system" XX @echo " make mips - Any MIPS box" XX @echo " make tcc - DOS with tcc 2.0" XX @echo " make tccswp - swapping DOS version with tcc 2.0" XX! @echo " make msc - DOS with MSC 4.0 to 5.1" XX @echo " make msc60 - DOS with MSC 6.0" XX! @echo " make mscswp - swapping DOS version with MSC 4.0 to 5.1" XX @echo " make msc60swp - swapping DOS version with MSC 6.0" XX XX bsd43uw :; /bin/sh -x < unix/bsd43/uw/make.sh XX bsd43vf dynix mips :; /bin/sh -x < unix/bsd43/vf/make.sh XX sysvr1 sysvr3 bsd43 386ix :; /bin/sh -x < unix/$@/make.sh XX! ultrix : sysvr3; XX XX # DOS with some form of make and sh XX # Note if you do not have a 'make and/or sh' program under MSDOS then XX # typing 'make' in the dmake distribution directory will invoke the make.bat SHAR_EOF echo "End of part 4, continue with part 5" echo "5" > s2_seq_.tmp exit 0