home *** CD-ROM | disk | FTP | other *** search
- .XLIST
- .XCREF
- PAGE 84,127 ;FOR MINI PRINT
- TITLE BTCHROOM.ASM
- COMMENT ~
- .LIST ;******************************************** BTCHROOM.ASM
- ; MAKE ROOM FOR COMMAND.COM'S BATCH FILE BLOCKS *
- ;****************************************************************
- ;
- ; 12/15/90
- ;
- A program which remains resident with 512 bytes after creating a
- file 'BTCHRLSE.COM' which when run releases 'BTCHROOM's resident
- code for use by COMMAND.COM for it's 'BATCH Information Block'.
- When COMMAND.COM executes a batch file it 1) opens the file,
- 2) reads a line, 3) closes the file after recording the file's name
- and location of the last line read and 4) then executes the line.
- This information is kept in RAM in what I will call a 'Batch File
- Information' block, part of the DOS memory chain which I will call
- a 'Batch File Information Block'.
- When running any batch file COMMAND.COM uses the 1st open memory
- block for it's 'Batch File Information Block' if there is no free room
- it puts this block at the top of free ram.
- When running a batch file which releases TSR's from memory using
- such programs as 'MARK/RELEASE', if this block is at the top of free
- ram the release program kills this 'information' block causing
- COMMAND.COM to hang when it can't find it's batch file information.
- Running 'BTCHROOM' in your AUTOEXEC.BAT file before the 1st release
- point leaves it resident with a size of 512 bytes and creates the file
- 'BTCHRLSE.COM'.
- After all the TSR's are loaded, run the new file 'BTCHRLSE', again
- from your AUTOEXEC.BAT, which will release 'BTCHROOM' leaving a 512K
- 'hole' for COMMAND.COM to use which will not be lost when a batch file
- using the 'RELEASE' portion of 'MARK/RELEASE' is run and will erase
- itself from the disk.
- ;
- ~ ; COMMENT
- ;****************************************************************
- ;
- LF EQU 0AH
- CR EQU 0DH
- ;
- S0000 SEGMENT
- ASSUME DS:S0000, SS:S0000 ,CS:S0000 ,ES:S0000
- ORG $+0100H
- ;
- ;****************************************************************
- ;
- ; START
- ;
- L0100 PROC NEAR
- ;
- MOV BX,1000H ;FREE ALL BUT 64K
- MOV AH,4AH
- INT 21H ;FREE ALLOCATED MEMORY
- MOV AX,DS:[002CH] ;POINT TO OUR ENVIRONMENT
- MOV WORD PTR BRENVT,AX ;FOR BTCHRLSE
- MOV AX,CS ;GET OUR SEGMENT
- MOV WORD PTR BRCODE,AX ;FOR BTCHRLSE
- MOV SI,0081H
- MOV CL,BYTE PTR [SI-1] ;GET COUNT
- XOR CH,CH
- JCXZ L0119 ;NO INPUT, make BTCHRLSE
- MOV DI,SI
- CLD
- MOV AL,'?'
- REPNZ SCASB
- JNZ L0119
- ;
- ; GIVE HELP
- ;
- HELP: MOV DX,OFFSET HLPMSG
- MOV AH,09
- INT 21H
- INT 20H
- ;
- ;----------------------------------------------------------------
- ;
- HLPMSG LABEL NEAR
- DB CR,LF,'BTCHROOM.COM '
- DB 'Community Business Systems 12/15/90'
- DB CR,LF,LF
- DB "Creates a 512 byte block of free ram for COMMAND.COM's "
- DB "batch file block so that"
- DB CR,LF
- DB "it will not 'loose itself' when releasing memory using "
- DB "a TSR release program. Run 'BTCHROOM' before any 'RELEASE' "
- DB "programs in your"
- DB CR,LF
- DB "'AUTOEXEC.BAT' and then run 'BTCHRLSE' after all removable "
- DB "TSR's are loaded."
- DB CR,LF,'$'
- ;
- ;----------------------------------------------------------------
- ;
- ; PUT 'BTCHRLSE.COM' IN OUR ENVIRONMENT
- ;
- L0119: PUSH ES
- MOV AX,CS:002CH ;POINT TO OUR ENVIRONMENT
- MOV ES,AX
- MOV CX,OFFSET BADFIL
- MOV SI,OFFSET FNTSTR
- SUB CX,SI ;LGT OF STR
- XOR DI,DI ;ES:DI->OUR ENVIRONMENT
- MOV AX,DI
- STOSW ;STO 0000
- INC AX
- STOSW ;STO 0001
- REP MOVSB ;PUT STRING IN ENVIRONMENT
- POP ES
- MOV DX,OFFSET FNTSTR
- MOV AX,4300H ;GET FILE ATTR
- INT 21H
- TEST CL,0110B ;HIDDEN OR SYSTEM FILE?
- JNZ BADFIL ;YES
- MOV AX,4301H ;NO, SET FILE ATTR
- MOV CX,0000 ;TO R/W
- INT 21H
- MOV AH,3CH ;CREATE FILE @ DX
- MOV CX,0020H ;ATTR
- INT 21H
- JB L0152 ;ERROR
- MOV BX,AX
- MOV AH,40H ;WRITE TO FILE
- MOV DX,OFFSET RLSPGM ;POINT TO FILE
- MOV CX,OFFSET ENDRLS-OFFSET RLSPGM ;LENGTH TO WRITE
- INT 21H ;WRITE IT
- MOV AH,3EH ;CLOSE IT
- INT 21H
- MOV DX,OFFSET INSTLMS
- MOV AH,09
- INT 21H
- MOV DX,0032 ;RESERVE .5K
- MOV AX,3100H
- INT 21H ; LEAVE BATCH FILE ROOM
- ;
- ;----------------------------------------------------------------
- ;
- BDFLMS DB CR,LF,"*** HIDDEN OR SYSTEM FILE, can't overwrite ***"
- DB CR,LF,'$'
- INSTLMS DB "*** BTCHROOM installed, run 'BTCHRLSE' ***",CR,LF,'$'
- ;
- FNTSTR DB 'BTCHRLSE.COM',00 ; Name for file to create
- ;
- ; HIDDEN OR SYSTEM FILE, NO CAN DO
- ;
- BADFIL: POP DX
- MOV DX,OFFSET BDFLMS
- MOV AH,09
- INT 21H
- ;
- ;****************************************************************
- ;
- ; FILE ERROR, RING BELL
- ;
- L0152: MOV AX,0E07H ;TTY OUT & BELL
- INT 10H
- INT 20H ;BACK TO DOS
- ;
- L0100 ENDP
- ;
- ;****************************************************************
- ; USER SUPPLIED FN.T START, RUNS TO RELEASE MEMORY
- ;****************************************************************
- ;
- RLSPGM PROC NEAR
- ;
- MOV BX,1000H ;FREE ALL BUT 64K
- MOV AH,4AH
- INT 21H ;FREE ALLOCATED MEMORY
- BRENVT EQU $+1 ;BTCHROOM's environment
- MOV DX,0000 ;Get BTCHROOM'S environmene segment
- MOV ES,DX ;To ES
- MOV AH,49H ;Free it
- INT 21H
- BRCODE EQU $+1 ;BTCHROOM's code
- MOV DX,0000 ;GET BTCHROOM'S code segment
- MOV ES,DX
- MOV AH,49H ;Free it
- INT 21H
- ; Now erase us
- MOV ES,CS:[002CH] ;POINT TO OUR ENVIRONMENT
- CALL FNDNAM ;FIND OUR NAME
- MOV DX,DI
- PUSH ES
- POP DS ;DS:DX->OUR FN.T
- MOV AX,4300H ;GET FILE ATTR
- INT 21H
- TEST CL,0110B ;ARE WE HIDDEN OR SYSTEM?
- JNZ NOKILL ;YES
- MOV DX,DI
- MOV AX,4301H ;NO, SET FILE ATTR
- MOV CX,0000 ;TO R/W
- INT 21H
- MOV DX,DI
- MOV AH,41H ;AND DELETE US
- INT 21H
- ;
- ; WE ARE HIDDEN OR SYSTEM FOR SOME REASON, DON'T ERASE
- ;
- NOKILL: PUSH CS
- POP DS
- MOV DX,OFFSET DONMSG+100H-OFFSET RLSPGM ;GET MSG OFST FRM START
- MOV AH,09
- INT 21H
- INT 20H
- ;
- ;****************************************************************
- ;
- ; POINT ES:DI->THE FILENAME IN THE ENVIRONMENT @ CS:
- ;
- FNDNAM PROC NEAR
- ;
- XOR DI,DI
- MOV AX,DI
- MOV CX,0FFFFH
- ;
- ; LOOP TO OUR NAME IN OUR ENVIRONMENT TO ERASE US
- ;
- FNDNM1: REPNZ SCASB ;FIND A NULL
- SCASB ;2ND NULL?
- JNZ FNDNM1 ;NO
- ADD DI,0002 ;YES, ES:DI->OUR NAME IN ENVIRONMENT
- RET
- FNDNAM ENDP
- ;
- ;****************************************************************
- ;
- DONMSG DB CR,LF
- DB ' Removing: BTCHROOM',CR,LF
- DB ' *** .5K ROOM MADE FOR BATCH FILE BLOCKS ***',CR,LF,'$'
- ;
- RLSPGM ENDP
- ;
- ;****************************************************************
- ;
- ENDRLS EQU $
- S0000 ENDS
- END L0100
-