This is a sample of TAS 5.1 program that is about 250 lines long (relatively short, simple program).
;SAMPLE program that demonstrates various TAS commands ;(this program was used to install a 1998 payroll update for Advanced Accounting #udx &&allow user defined functions/commands #lib \tas51\tasrtns &&call a library file to access functions/commands setup_color &&user defined command contains in the library color array norm clrscr &&clear the screen if windows() msg 'This installation program needs to be run in DOS mode. ' windows 'W' quit endif **************define program variables************ define fileloc_hndl type i define location type A size 40 array 99 && file location array - up to 99 companies! define code type A size 3 array 99 && company code array - up to 99 companies! define I type i size 3 define drive type A size 2 define askmsg type A size 75 define fd_name type a size 8 define file_name, create_file type a size 60 define choice type I size 3 ************open files************************ openv 'fileloc' lock N fnum fileloc_hndl ***************output to the screen**************************************** ;simpler way is to mount a screen created with the TAS screen painter pmsg ' 1998 PAYROLL UPDATE FOR ADVANCED ACCOUNTING 5.1 INSTALLATION PROGRAM' at 5,2 ptw S pmsg ' Copyright 1995-8 ADDSUM BUSINESS SOFTWARE,INC. 801-277-9240' at 5,3 ptw S pbox D at 1,1 len 4 wdt 79 pmsg '' ptw S pmsg ' Current path is ',cpath() ptw S pmsg '' ptw S if ffile('pr98.EXE','f')<>'' ask 'It appears that the PR98.EXE file is in your current subdirectory path. Is that correct? Y' if ask() drive="" choice=3 goto PROCEED endif endif CHOOSE: ;menu list options nmenu ' Drive A: ',' Drive B: ',' EXE file download',' eXit' at 26,10 len 6 nch 4 wdt 35 box 's' bcolor bc mcolor mc ccolor cc cntr choice shd 'r' scolor sc ttlw 'l' ttl ' Where is the payroll update? ' auto if choice=0 then quit select choice case 1 drive = "A:" case 2 drive = "B:" case 3 drive = "" case 4 quit endc PROCEED: ask 'Are you ready to proceed? Y' if .n. ask() then quit ;make sure this is the correct diskette if ffile(trim(drive,'t')+'pr98.EXE','f')<>'' if choice < 3 saves msg 'Copying files - please wait!' NOWAIT exec 'Copy' with drive + '*.* > nul' redsp endif else ask 'Cannot find the PR98.EXE file. Try again? Y' if ask() goto CHOOSE quit endif I=0 ;access/search through the file - scan through a Btrieve file named FILELOC.B ;used by TAS to keep track of file names, descriptors, type and path scan @fileloc_hndl key loc_file_name start 'BKSYMSTR' while loc_file_name='BKSYMSTR' I=I+1 location[I]=loc_location code[I]=loc_comp_code ends if I=0 msg 'No BKSYMSTR files were found - please call for support.' windows 'W' quit endif clr @fileloc_hndl buff if ffile('pr98.exe','F')<> '' ;file is here msg 'When you are asked if you want to overwrite, press letter A (for [A]ll). Press a key to continue.' windows 'info' saves clrscr exec 'PR98.EXE' &&extract the files that cames with this program in PR98 redsp else msg 'Could not find file PR98.EXE - perhaps it did not copy in successfully. This program will now end.' windows 'info' quit endif gosub menu_ary &&call subroutine in this program saves &&save the screen buffer chain 'newmerge' &&run an external TAS program (file would be NEWMERGE.RUN) redsp &&redisplay the screen buffer delf 'pr98.exe' &&delete the extract file if choice < 3 &&if choice was 3 we ran pr98.run from this directory so can't delete it automatically delf 'pr98.run' endif msg 'Installation is complete. ' windows 'info' clrscr quit 0 &&quits back to the prompt/desktop instead of staying in TAS environment NO_SYMSTR: msg 'No BKSYMSTR record was found. Please call for support.' windows 'W' quit INIT_FILE: create_file = location[cntr]*file_name*+"."+code[cntr] pmsg 'Creating file ',create_file at 10,18 ptw S NOCR chain 'initbtrv' with FD_NAME, CREATE_FILE &&calls external program passing values ret ;SUBROUTINE which opens a TEXT file, puts all of its contents in memory ;inserts text into that file and re-writes it to a disk (one of several ;ways to do this) - note that we use the same sort of commands on non-Btrive ;files that we do with Btrieve files menu_ary: define menu_hndl type I define cntr, max,row type I size 3 ;buffer and data sizes need to match the size option in the openv command below define buffer type A size 82 array 500 define DATA, LINE type A size 82 openv 'bkmenu.ary' fnum menu_hndl type X size 82 buff DATA &&open menu TEXT file findv F fnum menu_hndl key @1 err FILE_ERROR ;read records into the buffer array for(cntr;1;500;1) if mid(data,1,24)="1,G - Print W-2s,bkprg,7" DATA="1,G - Print W-2s & W-2 History,bkprg,7" &&change this line endif BUFFER[cntr] = DATA ;see if we are at the place where we want to insert items into the ;buffer if mid(buffer[cntr],1,2)="\\" max=cntr goto WRITE_FILE endif findv N fnum menu_HNDL key @1 err WRITE_FILE next WRITE_FILE: close @MENU_HNDL if ffile('bkmenu.arz','F')<> '' DO delf 'bkmenu.arz' endif renf 'bkmenu.ary' to 'bkmenu.arz' trap PG_BRK IGNR openv 'BKMENU' fnum menu_hndl type X ext 'ARY' size 82 buff data CREATE wrta buffer[cntr] to data maxa max cntr cntr file @MENU_HNDL DO_WINFILE: ;AJF clear the buffer! updta buffer clr times 500 ;do the same thing for the WINDOWS BKMENUW.ARY file openv 'bkmenuw.ary' fnum menu_hndl type X size 82 buff DATA findv F fnum menu_hndl key @1 err FILE_ERROR for(cntr;1;500;1) if mid(data,1,24)="1,G - Print W-2s,bkprg,7" DATA="1,G - Print W-2s & W-2 History,bkprg,7" &&change this line endif BUFFER[cntr] = DATA ;see if we are at the place where we want to insert items into the ;buffer if mid(buffer[cntr],1,2)="\\" max=cntr goto WIN_WRITE_FILE endif findv N fnum menu_HNDL key @1 err WIN_WRITE_FILE next WIN_WRITE_FILE: close @MENU_HNDL if ffile('bkmenuw.arz','F')<> '' DO delf 'bkmenuw.arz' endif renf 'bkmenuw.ary' to 'bkmenuw.arz' trap PG_BRK IGNR openv 'BKMENUW' fnum menu_hndl type X ext 'ARY' size 82 buff data CREATE wrta buffer[cntr] to data maxa max cntr cntr file @MENU_HNDL EXIT: msg 'Your prior menu files BKMENU.ARY and BKMENUW.ARY have been renamed BKMENU.ARZ and BKMENUW.ARZ in the event they are needed. You will need to ESC and come back into the software before you will see the menu changes!' windows 'info' ret FILE_ERROR: msg 'An error has occurred while trying to read BKMENU.ARY.' windows 'W' ret ;End of Program