basic.execute.apdos Statement/BASIC Program

basic.execute.apdos

Command basic.execute.apdos Statement/BASIC Program
Applicable release versions: AP/DOS
Category BASIC Program (486)
Description allows the execution of any valid MS-DOS command from Pick/BASIC.

Most MS-DOS commands may be "executed" (taking memory restrictions into account) using the standard Pick/BASIC "execute" statement directly by placing the "!" in front of the command.

AP/DOS does not currently support capturing output from an MS-DOS command with the "capturing" clause, like in the standard "execute" syntax. DOS output may be redirected using a "redirection clause" in the MS-DOS command.

AP/DOS does not allow stacked data by a previous Pick/BASIC "data" statement to be used as input for an MS-DOS command either. To use stacked data for an MS-DOS command, write the data to an MS-DOS file and then use the MS-DOS redirection clause within the "DOS.command".
Syntax execute "!DOS.command"
Options
Example
include includes fcntl.h
include includes errno.h 
max.sz = 1024 
dat = str(' ',max.sz) 

* Execute the command with the '>' redirection clause.
* This creates the file 'dir.tmp' which contains the
* output of the 'dir' command.
execute 'dir > dir.tmp' 

* Open the DOS file to be read.
fh = %open('dir.tmp',O$RDONLY,0)
if fh < 0 then print 'error opening: dir.tmp' ; stop 

* Read the DOS file.
rc = %read(fh,dat,max.sz)
if rc < 0 then print 'error reading: dir.tmp' else dat = dat[1,rc]
....
* Use the data that was read from the file into 'dat'
....
* Close the DOS file.
rc = %close(fh)
if rc < 0 then print 'error closing: dir.tmp'
end 

! Sample program to use a previously created file to be used
! as stacked data for an MS-DOS command. 

include includes fcntl.h
include includes errno.h
....
* Create the data, 'dat', for the file 'link.tmp' in here.
....
dat = dat:char(26)
max.sz = len(dat) 

* Open the file where the stacked data is going to be stored.
fh = %open('link.tmp',O$TRUNC+O$CREAT+O$RDWR,S$IREAD+S$IWRITE)
if fh < 0 then print 'error with open: link.tmp' ; stop 

* Write the stacked data to the file.
rc = %write(fh,dat,max.sz)
if rc < 0 then print 'error with write: link.tmp' 

* Close the DOS file.
rc = %close(fh)
if rc < 0 then print 'error with close: link.tmp' ; stop 

* Execute the command using the redirection clause '<'.
execute '!link < link.tmp'
end
Purpose Executes the specified "dos.command" from within a PICK/BASIC program.
Related basic.execute
basic.cfunc