[net.micro.pc] unshar { dos_a.a }

jb@csustan.UUCP (john birchfield) (10/01/86)

It appears I forgot something for the unshar program - here follows the
dos_a.a source in shar form - use unshar to extract it or /bin/sh on un*x
before you download ...  A thousand pardons for not getting IT (whatever it
is) together enough to get it all out on the 1st pass ...

*~*=*-*=*~*=*-*=*~*=*-*=*~*[cut-here]*~*=*-*=*~*=*-*=*~*=*-*=*~*=*-*=*~*
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
#       dos_a.a
# This archive created: 10-01-86   7:03:42# By:  (Tandy1200 (home))
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'dos_a.a'" '(3828 characters)'
if test -f 'dos_a.a'
then
        echo shar: "will not over-write existing file 'dos_a.a'"
else
sed 's/^	X//' << \***_Shar_Eof_Upload_*** > 'dos_a.a'
	X;	DOS_A.A - low level stuff - access to DOS - mostly used by
	X;		routines in DOS_C.C - a small attempt to get more 
	X;		Un*x Library compatibility into the C-Ware compiler.
	X;
	X
	X;		This code is neither complete nor faithful but it is
	X;		somewhat of a start ...
	X
	X;				---  24 Sep '86   ---
	X;				-- John Birchfield --
	X
	X
	X
	X
	X;	SET_DTA_	-	used by opendir () and readdir () {see below}
	X;		to establish the current dta { Disk Transfer Address } for
	X;		subsequent i/o operations.  Not needed anywhere else
	X
	X;	Usage:	set_dta (dirp);
	X
	X	CSEG
	X	PUBLIC	set_dta_
	Xset_dta_:
	X	push	bp
	X	mov	bp, sp
	X	mov	si, [bp+4]
	X	mov	dx, si
	X	mov	ah, 1ah
	X	int	21h
	X	mov	sp, bp
	X	pop	bp
	X	ret
	X
	X
	X
	X
	X;	A_OPEN_DIR_	-	Used by opendir (&direct) in DOS_C.C
	X;		direct is a structure which is filled in by MsDos
	X;		on a successful call ...  see DOS.H - the direct 
	X;		parameter is set up in readdir () by a call to set_dta ()
	X
	X;	Usage:	if (a_open_dir (name))
	X;			call_was_good
	X
	X	PUBLIC	a_open_dir_
	Xa_open_dir_:
	X	push	bp
	X	mov	bp, sp
	X	sub	sp, 2
	X	mov	word [bp-2], 1
	X	mov	si, word [bp+4]
	X	mov	dx, si
	X	mov	cx, 37h
	X	mov	ah, 4eh
	X	int	21h
	X	jnc	a_od_good
	X	mov	word [bp-2], 0
	Xa_od_good:
	X	mov	ax, word [bp-2]
	X	mov	sp, bp
	X	pop	bp
	X	ret
	X
	X
	X
	X
	X;	A_READ_DIR_	-	Used by readdir (&direct) in DOS_C.C - Look
	X;		at the code in readdir (&direct).  All useful information
	X;		is returned to struct direct as readdir performs a set_dta
	X;		to it's address.
	X
	X;	Usage:	if (a_read_dir ())
	X;			call_was_good
	X
	X	PUBLIC	a_read_dir_
	Xa_read_dir_:
	X	push	bp
	X	mov	bp, sp
	X	sub	sp, 2
	X	mov	word [bp-2], 1
	X	mov	ah, 4fh
	X	int	21h
	X	jnc	a_rd_good
	X	mov	word [bp-2], 0
	Xa_rd_good:
	X	mov	ax, word [bp-2]
	X	mov	sp, bp
	X	pop	bp
	X	ret
	X
	X
	X
	X
	X;	CHDIR_	-	chdir (path) can be used by any user function if the
	X;		need arises.  It returns TRUE for FAIL and FALSE for success.
	X;		this value seems to be what Un*x returns - PATH is a NULL
	X;		terminated character specifying the desired base directory
	X;		to change to.
	X
	X;	Usage: if (chdir (path)==0)
	X;			SUCCESS;
	X	PUBLIC	chdir_
	Xchdir_:
	X	push	bp
	X	mov	bp, sp
	X	sub	sp, 2
	X	mov	word [bp-2], 0
	X	mov	dx, word [bp+4]
	X	mov	ah, 3bh
	X	int	21h
	X	jnc	good_cd
	X	mov	word [bp-2], -1
	Xgood_cd:
	X	mov	ax, [bp-2]
	X	mov	sp, bp
	X	pop	bp
	X	ret
	X
	X
	X
	X
	X;	MKDIR_	-	Mkdir takes a directory or path name and attempts to
	X;		create a corresponding directory  - If successful then 0 is
	X;		returned - if not -1 is returned
	X
	X;		Usage: if (mkdir (directoryname)==0)
	X;				SUCCESS;
	X	PUBLIC	mkdir_
	Xmkdir_:
	X	push	bp
	X	mov	bp, sp
	X	sub	sp, 2
	X	mov	word [bp-2], 0
	X	mov	dx, [bp+4]
	X	mov	ah, 39h
	X	int	21h
	X	jnc	good_md
	X	mov	word [bp-2], 1
	Xgood_md:
	X	mov	ax, [bp-2]
	X	mov	sp, bp
	X	pop	bp
	X	ret
	X
	X
	X
	X
	X;	IOCTL	-	ioctl (&ioctlbuf) is the generic ioctl hook from
	X;		C to MsDos.  It is not very close to Un*x in it's
	X;		implementation.  The confusion is generated by the requirement
	X;		to go here and there in MsDos to get the same information
	X;		about a device or file that Un*x provides from one system
	X;		call.  All information returned by this call is provided in
	X;		the structure ioctlbuf.  If IOCTL was successful, it returns
	X;		0 - otherwise get out your MsDos Manual.
	X;
	X;	        The structure is defined in IOCTL.H and looks like ...
	X
	X;	struct ioctlbuf {
	X;		unsigned cmd,            AX Register
	X;		         handle,         BX Register
	X;		         cnt,            CX Register
	X;		         devdata;        DX Register
	X;	};
	X
	X	CSEG
	X	PUBLIC ioctl_
	Xioctl_:
	X	push	bp
	X	mov	bp, sp
	X	mov si, [bp+4]
	X	mov al, [si]
	X	mov bx, [si+2]
	X	mov cx, [si+4]
	X	mov dx, [si+6]
	X	mov ah, 44h
	X	int 21h
	X	mov si, [bp+4]
	X	mov [si], ax
	X	mov [si+2], bx
	X	mov [si+4], cx
	X	mov [si+6], dx
	X	jnc good_ioctl_call
	X	or  ax, 1h
	X	jmp ioctl_call_exit
	Xgood_ioctl_call:
	X	mov	ax, 0
	Xioctl_call_exit:
	X	pop	bp
	X	ret
	X
	X	END
***_Shar_Eof_Upload_***
if test 3828 -ne "`wc -c < 'dos_a.a'`"
then
        echo shar: "error transmitting 'dos_a.a'" '(should have been 3828 characters)'
fi
fi
exit 0
#       End of shell archive
-- 
 John Birchfield				lll-crg.arpa!csustan!jb
 411 Crane Ave., Turlock, CA  95380		(209) 634-6243