	page 64,132
	title bat-cd -- Batch file Directory Changer
.RADIX 10
;
;
;
;*****************************************************************
; Public domain program by H. Fischer - HFischer@eclb 12/83
; Questions/problems to HFischer@eclb (213/902-5139).
;
; For DOS 2.0 and later....
;
; Modified by M. D. Parker -- 1/4/84
;	This program had a little defect in that the default drive
;	was not reset after this program was used.
;	This version of the program will make the supplemental
;	change drive call after a successful chmod DOS call.
;
;	NOTE- The first character for CD output is used for
;	obtaining the drive designator.  The program ASSUMES
;	this is capitalized!
;
; This program allows a batch file to change directories
; (just like the CD command), but to read the new directory
; from the "standard input file" instead of the command line.
; The command:
;
;	bat-cd		reads new directory from keyboard
;	bat-cd < file	reads new directory from "file"
;	bat-cd <file >nul  no display of new dir name when changing
;
; You can use the directory changer to change back to the
; directory a batch file started out with, such as when
; doing a spelling correction or fancy font printing.
;   .
;   .	(your batch file to do fancy font from any directory)
;   .
;   echo off
;   cd > \bin\bat\starting.dir		saves initial directory
;   copy %1 \fancyfnt\temp/v		make file local to pfont dir
;   cd \fancyfnt			go to pfont dir
;   pfont +fi temp +fi romn12 (etc.)	do printing
;   del temp				get rid of local file copy
;   bat-cd <\bin\bat\starting.dir >nul	return to user's directory
;   echo on
;
; If you were going to, for example, a speller directory, which
; made changes to the file, then you would copy the local file back
; before changing directories back:
;
;   echo off
;   cd >\bin\bat\starting.dir		save initial directory
;   copy %1 \speller\temp.txt/v 	make your file local
;   cd \speller
;   spellit temp.txt
;   bat-cd <\bin\bat\starting.dir >nul	change back to user's dir
;   copy \speller\temp.txt %1/v 	copy spelling corrected file
;   del \speller\temp.txt		  back & delete other copy
;
; Note that the new input is read as a single line, without
; any prompt, followed by a carriage return.  If the input
; is not a valid directory, then the message "path not found"
; is placed on the standard output file (console, but redirectable
; if one wishes).
;
; To build this program:
;	1) asm bat-cd
;	2) link bat-cd
;	3) exe2bin bat-cd.exe \bin\bat-cd.com (name your path dir!)
;	4) del bat-cd.exe
;
;********************************************************************
code	segment para
	assume	cs:code
	org	100h
CD	proc	far
START:
	mov	ax,cs		; make this mess addressable via ds
	mov	ds,ax
	assume	ds:code
	mov	dx,offset buffer
	mov	ax,0c0ah
	int	21h		; read the new directory name
	mov	bh,0		; stuff a zero at the end
	mov	bl,buflen	;   of the name just read
	mov	entry[bx],bh
	mov	dx,offset entry
;
; now lets do the CD command
;
	mov	ah,3bh
	int	21h		; change the directory
	cmp	ax,3		; error code?
	jne	done
	mov	dx,offset error ; display error if bad path
	mov	ah,9
	int	21h
done:
;
; first lets change the default directory back
;
	mov	dl,entry	;get first character from input
	sub	dl,'A'          ;NOTE- must be capital letter
	mov	ah,0eh		;command to DOS for default changing
	int	21h		;call DOS to do the dirty work
	int	20h		;nightie night to this program

buffer	db	64		; longest path is 63 chars & c/r
buflen	db	0		; dos-read length
entry	db	64 dup(0)	; the new directory name
error	db	'path not found',10,13,'$'
saveit	db	0
CD endp
code ends
end start

