summaryrefslogtreecommitdiff
path: root/apps/examples/bastest
diff options
context:
space:
mode:
Diffstat (limited to 'apps/examples/bastest')
-rw-r--r--apps/examples/bastest/.gitignore13
-rw-r--r--apps/examples/bastest/Kconfig31
-rw-r--r--apps/examples/bastest/Makefile159
-rw-r--r--apps/examples/bastest/README.txt1628
-rw-r--r--apps/examples/bastest/bastest_main.c128
-rw-r--r--apps/examples/bastest/tests/test01.bas10
-rw-r--r--apps/examples/bastest/tests/test02.bas8
-rw-r--r--apps/examples/bastest/tests/test03.bas16
-rw-r--r--apps/examples/bastest/tests/test04.bas6
-rw-r--r--apps/examples/bastest/tests/test05.bas8
-rw-r--r--apps/examples/bastest/tests/test06.bas12
-rw-r--r--apps/examples/bastest/tests/test07.bas5
-rw-r--r--apps/examples/bastest/tests/test08.bas10
-rw-r--r--apps/examples/bastest/tests/test09.bas9
-rw-r--r--apps/examples/bastest/tests/test10.bas31
-rw-r--r--apps/examples/bastest/tests/test11.bas6
-rw-r--r--apps/examples/bastest/tests/test12.bas10
-rw-r--r--apps/examples/bastest/tests/test13.bas4
-rw-r--r--apps/examples/bastest/tests/test14.bas22
-rw-r--r--apps/examples/bastest/tests/test15.bas18
-rw-r--r--apps/examples/bastest/tests/test16.bas10
-rw-r--r--apps/examples/bastest/tests/test17.bas9
-rw-r--r--apps/examples/bastest/tests/test18.bas13
-rw-r--r--apps/examples/bastest/tests/test19.bas20
-rw-r--r--apps/examples/bastest/tests/test20.bas11
-rw-r--r--apps/examples/bastest/tests/test21.bas16
-rw-r--r--apps/examples/bastest/tests/test22.bas14
-rw-r--r--apps/examples/bastest/tests/test23.bas13
-rw-r--r--apps/examples/bastest/tests/test24.bas8
-rw-r--r--apps/examples/bastest/tests/test25.bas14
-rw-r--r--apps/examples/bastest/tests/test26.bas5
-rw-r--r--apps/examples/bastest/tests/test27.bas8
-rw-r--r--apps/examples/bastest/tests/test28.bas6
-rw-r--r--apps/examples/bastest/tests/test29.bas7
-rw-r--r--apps/examples/bastest/tests/test30.bas2
-rw-r--r--apps/examples/bastest/tests/test31.bas7
-rw-r--r--apps/examples/bastest/tests/test32.bas8
-rw-r--r--apps/examples/bastest/tests/test33.bas17
-rw-r--r--apps/examples/bastest/tests/test34.bas18
-rw-r--r--apps/examples/bastest/tests/test35.bas9
-rw-r--r--apps/examples/bastest/tests/test36.bas8
-rw-r--r--apps/examples/bastest/tests/test37.bas6
-rw-r--r--apps/examples/bastest/tests/test38.bas9
-rw-r--r--apps/examples/bastest/tests/test39.bas12
-rw-r--r--apps/examples/bastest/tests/test40.bas5
-rw-r--r--apps/examples/bastest/tests/test41.bas9
-rw-r--r--apps/examples/bastest/tests/test42.bas9
-rw-r--r--apps/examples/bastest/tests/test43.bas16
-rw-r--r--apps/examples/bastest/tests/test44.bas8
-rw-r--r--apps/examples/bastest/tests/test45.bas9
-rw-r--r--apps/examples/bastest/tests/test46.bas2
-rw-r--r--apps/examples/bastest/tests/test47.bas10
-rw-r--r--apps/examples/bastest/tests/test48.bas8
-rw-r--r--apps/examples/bastest/tests/test49.bas16
-rw-r--r--apps/examples/bastest/tests/test50.bas9
-rw-r--r--apps/examples/bastest/tests/test51.bas2
-rw-r--r--apps/examples/bastest/tests/test52.bas6
57 files changed, 2493 insertions, 0 deletions
diff --git a/apps/examples/bastest/.gitignore b/apps/examples/bastest/.gitignore
new file mode 100644
index 000000000..af17d4c1b
--- /dev/null
+++ b/apps/examples/bastest/.gitignore
@@ -0,0 +1,13 @@
+/Make.dep
+/.depend
+/.built
+/romfs.img
+/romfs.h
+/*.asm
+/*.obj
+/*.rel
+/*.lst
+/*.sym
+/*.adb
+/*.lib
+/*.src
diff --git a/apps/examples/bastest/Kconfig b/apps/examples/bastest/Kconfig
new file mode 100644
index 000000000..c12281d6d
--- /dev/null
+++ b/apps/examples/bastest/Kconfig
@@ -0,0 +1,31 @@
+#
+# For a description of the syntax of this configuration file,
+# see misc/tools/kconfig-language.txt.
+#
+
+config EXAMPLES_BASTEST
+ bool "Setup Test Files for BAS"
+ default n
+ depends on INTERPRETERS_BAS
+ ---help---
+ Mount the ROMFS file system containing the BAS test files at /mnt/romfs.
+
+if EXAMPLES_BASTEST
+
+config EXAMPLES_BASTEST_DEVMINOR
+ int "ROMFS Minor Device Number"
+ default 0
+ ---help---
+ The minor device number of the ROMFS block. For example, the N in /dev/ramN.
+ Used for registering the RAM block driver that will hold the ROMFS file system
+ containing the BASIC files to be tested. Default: 0
+
+config EXAMPLES_BASTEST_DEVPATH
+ string "ROMFS Device Path"
+ default "/dev/ram0"
+ ---help---
+ The path to the ROMFS block driver device. This must match EXAMPLES_BASTEST_DEVMINOR.
+ Used for registering the RAM block driver that will hold the ROMFS file system
+ containing the BASIC files to be tested. Default: "/dev/ram0"
+
+endif
diff --git a/apps/examples/bastest/Makefile b/apps/examples/bastest/Makefile
new file mode 100644
index 000000000..f6f788570
--- /dev/null
+++ b/apps/examples/bastest/Makefile
@@ -0,0 +1,159 @@
+############################################################################
+# apps/examples/bastest/Makefile
+#
+# Copyright (C) 2014 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+-include $(TOPDIR)/.config
+-include $(TOPDIR)/Make.defs
+include $(APPDIR)/Make.defs
+
+# BAS test volume mounter
+
+APPNAME = bastest
+PRIORITY = SCHED_PRIORITY_DEFAULT
+STACKSIZE = 2048
+
+# Hello, World! Example
+
+ASRCS =
+CSRCS =
+MAINSRC = bastest_main.c
+
+AOBJS = $(ASRCS:.S=$(OBJEXT))
+COBJS = $(CSRCS:.c=$(OBJEXT))
+MAINOBJ = $(MAINSRC:.c=$(OBJEXT))
+
+SRCS = $(ASRCS) $(CSRCS) $(MAINSRC)
+OBJS = $(AOBJS) $(COBJS)
+
+ifneq ($(CONFIG_BUILD_KERNEL),y)
+ OBJS += $(MAINOBJ)
+endif
+
+ifeq ($(CONFIG_WINDOWS_NATIVE),y)
+ BIN = ..\..\libapps$(LIBEXT)
+else
+ifeq ($(WINTOOL),y)
+ BIN = ..\\..\\libapps$(LIBEXT)
+else
+ BIN = ../../libapps$(LIBEXT)
+endif
+endif
+
+ifeq ($(WINTOOL),y)
+ INSTALL_DIR = "${shell cygpath -w $(BIN_DIR)}"
+else
+ INSTALL_DIR = $(BIN_DIR)
+endif
+
+BASTEST_DIR = $(APPDIR)$(DELIM)examples$(DELIM)bastest
+TESTS_DIR = $(BASTEST_DIR)$(DELIM)tests
+ROMFS_IMG = romfs.img
+ROMFS_HDR = romfs.h
+
+PROGNAME = bastest$(EXEEXT)
+
+ROOTDEPPATH = --dep-path .
+
+# Common build
+
+VPATH =
+
+all: .built
+.PHONY: clean depend distclean
+
+$(AOBJS): %$(OBJEXT): %.S
+ $(call ASSEMBLE, $<, $@)
+
+$(COBJS) $(MAINOBJ): %$(OBJEXT): %.c
+ $(call COMPILE, $<, $@)
+
+# Create the romfs.h header file from the tests/ directory
+
+$(ROMFS_IMG) :
+ $(Q) genromfs -f $@ -d $(TESTS_DIR) -V "BASTEST"
+
+$(ROMFS_HDR) : $(ROMFS_IMG)
+ $(Q) (xxd -i $(ROMFS_IMG) | sed -e "s/^unsigned/static const unsigned/g" >$@)
+
+# Add the BASTEST object to the archive
+
+.built: $(ROMFS_HDR) $(OBJS)
+ $(call ARCHIVE, $(BIN), $(OBJS))
+ @touch .built
+
+# Link and install the program binary
+
+ifeq ($(CONFIG_BUILD_KERNEL),y)
+$(BIN_DIR)$(DELIM)$(PROGNAME): $(OBJS) $(MAINOBJ)
+ @echo "LD: $(PROGNAME)"
+ $(Q) $(LD) $(LDELFFLAGS) $(LDLIBPATH) -o $(INSTALL_DIR)$(DELIM)$(PROGNAME) $(ARCHCRT0OBJ) $(MAINOBJ) $(LDLIBS)
+ $(Q) $(NM) -u $(INSTALL_DIR)$(DELIM)$(PROGNAME)
+
+install: $(BIN_DIR)$(DELIM)$(PROGNAME)
+
+else
+install:
+
+endif
+
+# Register the NSH builtin application
+
+ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
+$(BUILTIN_REGISTRY)$(DELIM)$(APPNAME)_main.bdat: $(DEPCONFIG) Makefile
+ $(call REGISTER,$(APPNAME),$(PRIORITY),$(STACKSIZE),$(APPNAME)_main)
+
+context: $(BUILTIN_REGISTRY)$(DELIM)$(APPNAME)_main.bdat
+else
+context:
+endif
+
+# Housekeeping stuff
+
+.depend: Makefile $(SRCS)
+ @$(MKDEP) $(ROOTDEPPATH) "$(CC)" -- $(CFLAGS) -- $(SRCS) >Make.dep
+ @touch $@
+
+depend: .depend
+
+clean:
+ $(call DELFILE, .built)
+ $(call CLEAN)
+
+distclean: clean
+ $(call DELFILE, $(ROMFS_HDR))
+ $(call DELFILE, $(ROMFS_IMG))
+ $(call DELFILE, Make.dep)
+ $(call DELFILE, .depend)
+
+-include Make.dep
diff --git a/apps/examples/bastest/README.txt b/apps/examples/bastest/README.txt
new file mode 100644
index 000000000..846fad0e0
--- /dev/null
+++ b/apps/examples/bastest/README.txt
@@ -0,0 +1,1628 @@
+README
+======
+
+ This directory contains a small program that will mount a ROMFS file system
+ containing the BASIC test files extracted from the BAS 2.4 release.
+
+Background
+==========
+ Bas is an interpreter for the classic dialect of the programming language
+ BASIC. It is pretty compatible to typical BASIC interpreters of the 1980s,
+ unlike some other UNIX BASIC interpreters, that implement a different
+ syntax, breaking compatibility to existing programs. Bas offers many ANSI
+ BASIC statements for structured programming, such as procedures, local
+ variables and various loop types. Further there are matrix operations,
+ automatic LIST indentation and many statements and functions found in
+ specific classic dialects. Line numbers are not required.
+
+ The interpreter tokenises the source and resolves references to variables
+ and jump targets before running the program. This compilation pass
+ increases efficiency and catches syntax errors, type errors and references
+ to variables that are never initialised. Bas is written in ANSI C for
+ UNIX systems.
+
+License
+=======
+ BAS 2.4 is released as part of NuttX under the standard 3-clause BSD license
+ use by all components of NuttX. This is not incompatible with the original
+ BAS 2.4 licensing
+
+ Copyright (c) 1999-2014 Michael Haardt
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+
+TEST OVERVIEW
+=============
+
+test01.bas
+==========
+Scalar variable assignment
+
+Test File
+---------
+10 a=1
+20 print a
+30 a$="hello"
+40 print a$
+50 a=0.0002
+60 print a
+70 a=2.e-6
+80 print a
+90 a=.2e-6
+100 print a
+
+Expected Result
+---------------
+ 1
+hello
+ 0.0002
+ 2e-06
+ 2e-07
+
+test02.bas
+==========
+Array variable assignment
+
+Test File
+---------
+10 dim a(1)
+20 a(0)=10
+30 a(1)=11
+40 a=12
+50 print a(0)
+60 print a(1)
+70 print a
+
+Expected Result
+---------------
+ 10
+ 11
+ 12
+
+test03.bas
+==========
+FOR loops
+
+Test File
+---------
+ 10 for i=0 to 10
+ 20 print i
+ 30 if i=5 then exit for
+ 40 next
+ 50 for i=0 to 0
+ 60 print i
+ 70 next I
+ 80 for i=1 to 0 step -1
+ 90 print i
+100 next
+110 for i=1 to 0
+120 print i
+130 next
+140 for i$="" to "aaaaaaaaaa" step "a"
+150 print i$
+160 next
+
+Expected Result
+---------------
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 0
+ 1
+ 0
+
+a
+aa
+aaa
+aaaa
+aaaaa
+aaaaaa
+aaaaaaa
+aaaaaaaa
+aaaaaaaaa
+aaaaaaaaaa
+
+test04.bas
+==========
+REPEAT UNTIL loop
+
+Test File
+---------
+10 a=1
+20 repeat
+30 print a
+40 a=a+1
+50 until a=10
+
+Expected Result
+---------------
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+
+test05.bas
+==========
+GOSUB RETURN subroutines
+
+Test File
+---------
+10 gosub 100
+20 gosub 100
+30 end
+100 gosub 200
+110 gosub 200
+120 return
+200 print "hello, world":return
+
+Expected Result
+---------------
+hello, world
+hello, world
+hello, world
+hello, world
+
+test06.bas
+==========
+Recursive function without arguments
+
+Test File
+---------
+10 def fnloop
+20 if n=0.0 then
+30 r=0.0
+40 else
+50 print n
+60 n=n-1.0
+70 r=fnloop()
+80 end if
+90 =r
+100 n=10
+110 print fnloop
+
+Expected Result
+---------------
+ 10
+ 9
+ 8
+ 7
+ 6
+ 5
+ 4
+ 3
+ 2
+ 1
+ 0
+
+test07.bas
+==========
+Recursive function with arguments
+
+Test File
+---------
+10 def fna(x)
+20 if x=0 then r=1 else r=x*fna(x-1)
+30 =r
+40 print fna(7)
+
+Expected Result
+---------------
+ 5040
+
+test08.bas
+==========
+DATA, READ and RESTORE
+
+Test File
+---------
+10 data "a",b
+20 data "c","d
+40 read j$
+50 print "j=";j$
+60 restore 20
+70 for i=1 to 3
+80 read j$,k$
+90 print "j=";j$;" k=";k$
+100 next
+
+Expected Result
+---------------
+j=a
+j=c k=d
+Error: end of `data' in line 80 at:
+80 read j$,k$
+ ^
+
+test09.bas
+==========
+LOCAL variables
+
+Test File
+---------
+10 def fna(a)
+20 local b
+30 b=a+1
+40 =b
+60 b=3
+70 print b
+80 print fna(4)
+90 print b
+
+Expected Result
+---------------
+ 3
+ 5
+ 3
+
+test10.bas
+==========
+PRINT USING
+
+Test File
+---------
+ 10 print using "!";"abcdef"
+ 20 print using "\ \";"abcdef"
+ 30 print using "###-";-1
+ 40 print using "###-";0
+ 50 print using "###-";1
+ 60 print using "###+";-1
+ 70 print using "###+";0
+ 80 print using "###+";1
+ 90 print using "#####,";1000
+100 print using "**#,##.##";1000.00
+110 print using "+##.##";1
+120 print using "+##.##";1.23400
+130 print using "+##.##";123.456
+140 print using "+##.";123.456
+150 print using "+##";123.456
+160 print using "abc def ###.## efg";1.3
+170 print using "###.##^^^^^";5
+180 print using "###.##^^^^";1000
+190 print using ".##^^^^";5.0
+200 print using "##^^^^";2.3e-9
+210 print using ".##^^^^";2.3e-9
+220 print using "#.#^^^^";2.3e-9
+230 print using ".####^^^^^";-011466
+240 print using "$*,***,***,***.**";3729825.24
+250 print using "$**********.**";3729825.24
+260 print using "$$###.##";456.78
+270 print using "a!b";"S"
+280 print using "a!b";"S","T"
+290 print using "a!b!c";"S"
+300 print using "a!b!c";"S","T"
+
+Expected Result
+---------------
+a
+abc
+ 1-
+ 0
+ 1
+ 1-
+ 0+
+ 1+
+ 1,000
+*1,000.00
+ +1.00
+ +1.23
++123.46
++123.
++123
+abc def 1.30 efg
+500.00E-002
+100.00E+01
+.50E+01
+23E-10
+.23E-08
+2.3E-09
+-.1147E+005
+$***3,729,825.24
+$**3729825.24
+$456.78
+aSb
+aSbaTb
+aSb
+aSbTc
+
+test11.bas
+==========
+OPEN and LINE INPUT
+
+Test File
+---------
+10 open "i",1,"test.bas"
+20 while not eof(1)
+30 line input #1,a$
+40 print a$
+50 wend
+
+Expected Result
+---------------
+10 open "i",1,"test.bas"
+20 while not eof(1)
+30 line input #1,a$
+40 print a$
+50 wend
+
+test12.bas
+==========
+Exception handling
+
+Test File
+---------
+10 on error print "global handler 1 caught error in line ";erl : resume 30
+20 print mid$("",-1)
+30 on error print "global handler 2 caught error in line ";erl : end
+40 def procx
+50 on error print "local handler caught error in line";erl : goto 70
+60 print 1/0
+70 end proc
+80 procx
+90 print 1 mod 0
+
+Expected Result
+---------------
+global handler 1 caught error in line 20
+local handler caught error in line 60
+global handler 2 caught error in line 90
+
+test01.bas
+==========
+Unnumbered lines
+
+Test File
+---------
+print "a"
+goto 20
+print "b"
+20 print "c"
+
+Expected Result
+---------------
+a
+c
+
+test14.bas
+==========
+SELECT CASE
+
+Test File
+---------
+ 10 for i=0 to 9
+ 20 for j=0 to 9
+ 30 print i,j
+ 40 select case i
+ 50 case 0
+ 60 print "i after case 0"
+ 70 case 1
+ 80 print "i after case 1"
+ 90 select case j
+100 case 0
+110 print "j after case 0"
+120 end select
+130 case 3 to 5,7
+140 print "i after case 3 to 5, 7"
+150 case is <9
+160 print "is after case is <9"
+170 case else
+180 print "i after case else"
+190 end select
+200 next
+210 next
+
+Expected Result
+---------------
+ 0 0
+i after case 0
+ 0 1
+i after case 0
+ 0 2
+i after case 0
+ 0 3
+i after case 0
+ 0 4
+i after case 0
+ 0 5
+i after case 0
+ 0 6
+i after case 0
+ 0 7
+i after case 0
+ 0 8
+i after case 0
+ 0 9
+i after case 0
+ 1 0
+i after case 1
+j after case 0
+ 1 1
+i after case 1
+ 1 2
+i after case 1
+ 1 3
+i after case 1
+ 1 4
+i after case 1
+ 1 5
+i after case 1
+ 1 6
+i after case 1
+ 1 7
+i after case 1
+ 1 8
+i after case 1
+ 1 9
+i after case 1
+ 2 0
+is after case is <9
+ 2 1
+is after case is <9
+ 2 2
+is after case is <9
+ 2 3
+is after case is <9
+ 2 4
+is after case is <9
+ 2 5
+is after case is <9
+ 2 6
+is after case is <9
+ 2 7
+is after case is <9
+ 2 8
+is after case is <9
+ 2 9
+is after case is <9
+ 3 0
+i after case 3 to 5, 7
+ 3 1
+i after case 3 to 5, 7
+ 3 2
+i after case 3 to 5, 7
+ 3 3
+i after case 3 to 5, 7
+ 3 4
+i after case 3 to 5, 7
+ 3 5
+i after case 3 to 5, 7
+ 3 6
+i after case 3 to 5, 7
+ 3 7
+i after case 3 to 5, 7
+ 3 8
+i after case 3 to 5, 7
+ 3 9
+i after case 3 to 5, 7
+ 4 0
+i after case 3 to 5, 7
+ 4 1
+i after case 3 to 5, 7
+ 4 2
+i after case 3 to 5, 7
+ 4 3
+i after case 3 to 5, 7
+ 4 4
+i after case 3 to 5, 7
+ 4 5
+i after case 3 to 5, 7
+ 4 6
+i after case 3 to 5, 7
+ 4 7
+i after case 3 to 5, 7
+ 4 8
+i after case 3 to 5, 7
+ 4 9
+i after case 3 to 5, 7
+ 5 0
+i after case 3 to 5, 7
+ 5 1
+i after case 3 to 5, 7
+ 5 2
+i after case 3 to 5, 7
+ 5 3
+i after case 3 to 5, 7
+ 5 4
+i after case 3 to 5, 7
+ 5 5
+i after case 3 to 5, 7
+ 5 6
+i after case 3 to 5, 7
+ 5 7
+i after case 3 to 5, 7
+ 5 8
+i after case 3 to 5, 7
+ 5 9
+i after case 3 to 5, 7
+ 6 0
+is after case is <9
+ 6 1
+is after case is <9
+ 6 2
+is after case is <9
+ 6 3
+is after case is <9
+ 6 4
+is after case is <9
+ 6 5
+is after case is <9
+ 6 6
+is after case is <9
+ 6 7
+is after case is <9
+ 6 8
+is after case is <9
+ 6 9
+is after case is <9
+ 7 0
+i after case 3 to 5, 7
+ 7 1
+i after case 3 to 5, 7
+ 7 2
+i after case 3 to 5, 7
+ 7 3
+i after case 3 to 5, 7
+ 7 4
+i after case 3 to 5, 7
+ 7 5
+i after case 3 to 5, 7
+ 7 6
+i after case 3 to 5, 7
+ 7 7
+i after case 3 to 5, 7
+ 7 8
+i after case 3 to 5, 7
+ 7 9
+i after case 3 to 5, 7
+ 8 0
+is after case is <9
+ 8 1
+is after case is <9
+ 8 2
+is after case is <9
+ 8 3
+is after case is <9
+ 8 4
+is after case is <9
+ 8 5
+is after case is <9
+ 8 6
+is after case is <9
+ 8 7
+is after case is <9
+ 8 8
+is after case is <9
+ 8 9
+is after case is <9
+ 9 0
+i after case else
+ 9 1
+i after case else
+ 9 2
+i after case else
+ 9 3
+i after case else
+ 9 4
+i after case else
+ 9 5
+i after case else
+ 9 6
+i after case else
+ 9 7
+i after case else
+ 9 8
+i after case else
+ 9 9
+i after case else
+
+test15.bas
+==========
+FIELD, PUT and GET
+
+Test File
+---------
+a$="a"
+open "r",1,"test.dat",128
+print "before field a$=";a$
+field #1,10 as a$
+field #1,5 as b$,5 as c$
+lset b$="hi"
+rset c$="ya"
+print "a$=";a$
+put #1
+close #1
+print "after close a$=";a$
+open "r",2,"test.dat",128
+field #2,10 as b$
+get #2
+print "after get b$=";b$
+close #2
+kill "test.dat"
+
+Expected Result
+---------------
+before field a$=a
+a$=hi ya
+after close a$=
+after get b$=hi ya
+
+test16.bas
+==========
+SWAP
+
+Test File
+---------
+a=1 : b=2
+print "a=";a;"b=";b
+swap a,b
+print "a=";a;"b=";b
+dim a$(1,1),b$(1,1)
+a$(1,0)="a" : b$(0,1)="b"
+print "a$(1,0)=";a$(1,0);"b$(0,1)=";b$(0,1)
+swap a$(1,0),b$(0,1)
+print "a$(1,0)=";a$(1,0);"b$(0,1)=";b$(0,1)
+
+Expected Result
+---------------
+a= 1 b= 2
+a= 2 b= 1
+a$(1,0)=ab$(0,1)=b
+a$(1,0)=bb$(0,1)=a
+
+test17.bas
+==========
+DO, EXIT DO, LOOP
+
+Test File
+---------
+print "loop started"
+i=1
+do
+ print "i is";i
+ i=i+1
+ if i>10 then exit do
+loop
+print "loop ended"
+
+Expected Result
+---------------
+loop started
+i is 1
+i is 2
+i is 3
+i is 4
+i is 5
+i is 6
+i is 7
+i is 8
+i is 9
+i is 10
+loop ended
+
+test18.bas
+==========
+DO WHILE, LOOP
+
+Test File
+---------
+print "loop started"
+x$=""
+do while len(x$)<3
+ print "x$ is ";x$
+ x$=x$+"a"
+ y$=""
+ do while len(y$)<2
+ print "y$ is ";y$
+ y$=y$+"b"
+ loop
+loop
+print "loop ended"
+
+Expected Result
+---------------
+loop started
+x$ is
+y$ is
+y$ is b
+x$ is a
+y$ is
+y$ is b
+x$ is aa
+y$ is
+y$ is b
+loop ended
+
+test19.bas
+==========
+ELSEIF
+
+Test File
+---------
+for x=1 to 3
+ if x=1 then
+ print "1a"
+ else
+ if x=2 then
+ print "2a"
+ else
+ print "3a"
+ end if
+ end if
+next
+
+for x=1 to 3
+ if x=1 then
+ print "1b"
+ elseif x=2 then
+ print "2b"
+ elseif x=3 then print "3b"
+next
+
+Expected Result
+---------------
+1a
+2a
+3a
+1b
+2b
+3b
+
+test20.bas
+==========
+Caller trace
+
+Test File
+---------
+ 10 gosub 20
+ 20 gosub 30
+ 30 procb
+ 40 def proca
+ 50 print "hi"
+ 60 stop
+ 70 end proc
+ 80 def procb
+ 90 proca
+100 end proc
+
+Expected Result
+---------------
+hi
+Break in line 60 at:
+60 stop
+ ^
+Proc Called in line 90 at:
+90 proca
+ ^
+Proc Called in line 30 at:
+30 procb
+ ^
+Called in line 20 at:
+20 gosub 30
+ ^
+Called in line 10 at:
+10 gosub 20
+ ^
+
+test21.bas
+==========
+Matrix assignment
+
+Test File
+---------
+dim a(3,4)
+for i=0 to 3
+ for j=0 to 4
+ a(i,j)=i*10+j
+ print a(i,j);
+ next
+ print
+next
+mat b=a
+for i=0 to 3
+ for j=0 to 4
+ print b(i,j);
+ next
+ print
+next
+
+Expected Result
+---------------
+ 0 1 2 3 4
+ 10 11 12 13 14
+ 20 21 22 23 24
+ 30 31 32 33 34
+ 0 0 0 0 0
+ 0 11 12 13 14
+ 0 21 22 23 24
+ 0 31 32 33 34
+
+test22.bas
+==========
+MAT PRINT
+
+Test File
+---------
+dim a(2,2)
+for i=0 to 2
+ for j=0 to 2
+ a(i,j)=i*10+j
+ next
+next
+for j=1 to 2
+ for i=1 to 2
+ print using " ##.##";a(i,j),
+ next
+ print
+next
+mat print using " ##.##";a,a
+
+Expected Result
+---------------
+ 11.00 21.00
+ 12.00 22.00
+ 11.00 12.00
+ 21.00 22.00
+
+ 11.00 12.00
+ 21.00 22.00
+
+test23.bas
+==========
+Matrix addition and subtraction
+
+Test File
+---------
+dim a(2,2)
+a(2,2)=2.5
+dim b%(2,2)
+b%(2,2)=3
+mat print a
+mat a=a-b%
+mat print a
+dim c$(2,2)
+c$(2,1)="hi"
+mat print c$
+mat c$=c$+c$
+mat print c$
+
+Expected Result
+---------------
+ 0 0
+ 0 2.5
+ 0 0
+ 0 -0.5
+
+hi
+
+hihi
+
+test24.bas
+==========
+Matrix multiplication
+
+Test File
+---------
+10 dim b(2,3),c(3,2)
+20 for i=1 to 2 : for j=1 to 3 : read b(i,j) : next : next
+30 for i=1 to 3 : for j=1 to 2 : read c(i,j) : next : next
+40 mat a=b*c
+50 mat print b,c,a
+60 data 1,2,3,3,2,1
+70 data 1,2,2,1,3,3
+
+Expected Result
+---------------
+ 1 2 3
+ 3 2 1
+
+ 1 2
+ 2 1
+ 3 3
+
+ 14 13
+ 10 11
+
+test25.bas
+==========
+Matrix scalar multiplication
+
+Test File
+---------
+10 dim a(3,3)
+20 for i=1 to 3 : for j=1 to 3 : read a(i,j) : next : next
+30 mat print a
+40 mat a=(3)*a
+45 print
+50 mat print a
+60 data 1,2,3,4,5,6,7,8,9
+80 dim inch_array(5,1),cm_array(5,1)
+90 mat read inch_array
+100 data 1,12,36,100,39.37
+110 mat print inch_array
+120 mat cm_array=(2.54)*inch_array
+130 mat print cm_array
+
+Expected Result
+---------------
+ 1 2 3
+ 4 5 6
+ 7 8 9
+
+ 3 6 9
+ 12 15 18
+ 21 24 27
+ 1
+ 12
+ 36
+ 100
+ 39.37
+ 2.54
+ 30.48
+ 91.44
+ 254
+ 99.9998
+
+test26.bas
+==========
+MAT READ
+
+Test File
+---------
+dim a(3,3)
+data 5,5,5,8,8,8,3,3
+mat read a(2,3)
+mat print a
+
+Expected Result
+---------------
+ 5 5 5
+ 8 8 8
+
+test27.bas
+==========
+Matrix inversion
+
+Test File
+---------
+data 1,2,3,4
+mat read a(2,2)
+mat print a
+mat b=inv(a)
+mat print b
+mat c=a*b
+mat print c
+
+Expected Result
+---------------
+ 1 2
+ 3 4
+-2 1
+ 1.5 -0.5
+ 1 0
+ 0 1
+
+test28.bas
+==========
+TDL BASIC FNRETURN/FNEND
+
+Test File
+---------
+def fnfac(n)
+ if n=1 then fnreturn 1
+fnend n*fnfac(n-1)
+
+print fnfac(10)
+
+Expected Result
+---------------
+ 3628800
+
+test29.bas
+==========
+TDL INSTR
+
+Test File
+---------
+print instr("123456789","456");" = 4?"
+print INSTR("123456789","654");" = 0?"
+print INSTR("1234512345","34");" = 3?"
+print INSTR("1234512345","34",6);" = 8?"
+print INSTR("1234512345","34",6,2);" = 0?"
+print INSTR("1234512345","34",6,4);" = 8?"
+
+Expected Result
+---------------
+ 4 = 4?
+ 0 = 0?
+ 3 = 3?
+ 8 = 8?
+ 0 = 0?
+ 8 = 8?
+
+test30.bas
+==========
+Type mismatch check
+
+Test File
+---------
+print 1+"a"
+
+Expected Result
+---------------
+Error: Invalid binary operand at: end of program
+
+test31.bas
+==========
+PRINT default format
+
+Test File
+---------
+10 for i=-8 to 8
+20 x=1+1/3 : y=1 : j=i
+30 for j=i to -1 : x=x/10 : y=y/10 : next
+40 for j=i to 1 step -1 : x=x*10 : y=y*10 : next
+50 print x,y
+60 next
+
+Expected Result
+---------------
+ 1.333333e-08 1e-08
+ 1.333333e-07 1e-07
+ 1.333333e-06 1e-06
+ 1.333333e-05 1e-05
+ 0.000133 0.0001
+ 0.001333 0.001
+ 0.013333 0.01
+ 0.133333 0.1
+ 1.333333 1
+ 13.33333 10
+ 133.3333 100
+ 1333.333 1000
+ 13333.33 10000
+ 133333.3 100000
+ 1333333 1000000
+ 1.333333e+07 1e+07
+ 1.333333e+08 1e+08
+
+test032.bas
+==========
+SUB routines
+
+Test File
+---------
+PUTS("abc")
+END
+
+SUB PUTS(s$)
+ FOR i=1 to LEN(s$) : print mid$(s$,i,1); : NEXT
+ PRINT
+END SUB
+
+Expected Result
+---------------
+abc
+
+test33.bas
+==========
+OPEN FOR BINARY
+
+Test File
+---------
+open "test.out" for binary as 1
+put 1,1,"xy"
+put 1,3,"z!"
+put 1,10,1/3
+put 1,20,9999
+close 1
+open "test.out" for binary as 1
+s$=" "
+get 1,1,s$
+get 1,10,x
+get 1,20,n%
+close
+print s$
+print x
+print n%
+kill "test.out"
+
+Expected Result
+---------------
+xyz!
+ 0.333333
+ 9999
+
+test34.bas
+==========
+OPTION BASE
+
+Test File
+---------
+option base 3
+dim a(3,5)
+a(3,3)=1
+a(3,5)=2
+
+print a(3,3)
+print a(3,5)
+
+option base -2
+dim b(-1,2)
+b(-2,-2)=10
+b(-1,2)=20
+
+print a(3,3)
+print a(3,5)
+print b(-2,-2)
+print b(-1,2)
+
+Expected Result
+---------------
+ 1
+ 2
+ 1
+ 2
+ 10
+ 20
+
+test35.bas
+==========
+Real to integer conversion
+
+Test File
+---------
+a%=1.2
+print a%
+a%=1.7
+print a%
+a%=-0.2
+print a%
+a%=-0.7
+print a%
+
+Expected Result
+---------------
+ 1
+ 2
+ 0
+-1
+
+test36.bas
+==========
+OPEN file locking
+
+Test File
+---------
+on error goto 10
+print "opening file"
+open "test.out" for output lock write as #1
+print "open succeeded"
+if command$<>"enough" then shell "sh ./test/runbas test.bas enough"
+end
+10 print "open failed"
+
+Expected Result
+---------------
+opening file
+open succeeded
+opening file
+open failed
+
+test37.bas
+==========
+LINE INPUT reaching EOF
+
+Test File
+---------
+10 open "i",1,"test.ref"
+20 while not eof(1)
+30 line input #1,a$
+40 if a$="abc" then print a$; else print "def"
+50 wend
+
+Result
+------
+ Output should match test.ref
+
+test38.bas
+==========
+MAT REDIM
+
+Test File
+---------
+dim x(10)
+mat read x
+mat print x
+mat redim x(7)
+mat print x
+mat redim x(12)
+mat print x
+data 1,2,3,4,5,6,7,8,9,10
+
+Expected Result
+---------------
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 0
+ 0
+ 0
+ 0
+ 0
+
+test39.bas
+==========
+Nested function and procedure calls
+
+Test File
+---------
+def proc_a(x)
+print fn_b(1,x)
+end proc
+
+def fn_b(a,b)
+= a+fn_c(b)
+
+def fn_c(b)
+= b+3
+
+proc_a(2)
+
+Expected Result
+---------------
+ 6
+
+test40.bas
+==========
+IMAGE
+
+Test File
+---------
+ d=3.1
+ print using "#.#";d
+ print using 10;d
+10 image #.##
+
+Expected Result
+---------------
+3.1
+3.10
+
+test41.bas
+==========
+EXIT FUNCTION
+
+Test File
+---------
+function f(c)
+print "f running"
+if (c) then f=42 : exit function
+f=43
+end function
+
+print f(0)
+print f(1)
+
+Expected Result
+---------------
+f running
+ 43
+f running
+ 42
+
+test42.bas
+==========
+Arithmetic
+
+Test File
+---------
+10 print 4.7\3
+20 print -2.3\1
+30 print int(-2.3)
+40 print int(2.3)
+50 print fix(-2.3)
+60 print fix(2.3)
+70 print fp(-2.3)
+80 print fp(2.3)
+
+Expected Result
+---------------
+ 1
+-2
+-3
+ 2
+-2
+ 2
+-0.3
+ 0.3
+
+test43.bas
+==========
+Matrix multiplication size checks
+
+Test File
+---------
+DIM a(3,3),b(3,1),c(3,3)
+MAT READ a
+MAT READ b
+MAT c=a*b
+MAT PRINT c
+DATA 1,2,3,4,5,6,7,8,9
+DATA 5,3,2
+
+erase b
+DIM b(3)
+RESTORE
+MAT READ a
+MAT READ b
+MAT c=a*b
+MAT PRINT c
+
+Expected Result
+---------------
+ 17
+ 47
+ 77
+Error: Dimension mismatch in line 14 at:
+mat c=a*b
+ ^
+
+test44.bas
+==========
+DELETE
+
+Test File
+---------
+10 print 10
+20 print 20
+30 print 30
+40 print 40
+50 print 50
+60 print 60
+70 print 70
+
+Usage
+-----
+load "test.bas"
+delete -20
+delete 60-
+delete 30-40
+delete 15
+list
+
+Expected Result
+---------------
+Error: No such line at: 15
+50 print 50
+
+test45.bas
+==========
+MID$ on left side
+
+Test File
+---------
+10 mid$(a$,6,4) = "ABCD"
+20 print a$
+30 a$="0123456789"
+40 mid$(a$,6,4) = "ABCD"
+50 print a$
+60 a$="0123456789"
+70 let mid$(a$,6,4) = "ABCD"
+80 print a$
+
+Expected Result
+---------------
+
+01234ABCD9
+01234ABCD9
+
+test46.bas
+==========
+END used without program
+
+Test File
+---------
+for i=1 to 10:print i;:next i:end
+
+Expected Result
+---------------
+ 1 2 3 4 5 6 7 8 9 10
+
+test47.bas
+==========
+MAT WRITE
+
+Test File
+---------
+dim a(3,4)
+for i=0 to 3
+ for j=0 to 4
+ a(i,j)=i*10+j
+ print a(i,j);
+ next
+ print
+next
+mat write a
+
+Expected Result
+---------------
+ 0 1 2 3 4
+ 10 11 12 13 14
+ 20 21 22 23 24
+ 30 31 32 33 34
+11,12,13,14
+21,22,23,24
+31,32,33,34
+
+test48.bas
+==========
+Multi assignment
+
+Test File
+---------
+a,b = 10
+print a,b
+dim c(10)
+a,c(a) = 2
+print a,c(2),c(10)
+a$,b$="test"
+print a$,b$
+
+Expected Result
+---------------
+ 10 10
+ 2 0 2
+test test
+
+test49.bas
+==========
+Matrix determinant
+
+Test File
+---------
+width 120
+dim a(7,7),b(7,7)
+mat read a
+mat print a;
+print
+data 58,71,67,36,35,19,60
+data 50,71,71,56,45,20,52
+data 64,40,84,50,51,43,69
+data 31,28,41,54,31,18,33
+data 45,23,46,38,50,43,50
+data 41,10,28,17,33,41,46
+data 66,72,71,38,40,27,69
+mat b=inv(a)
+mat print b
+print det
+
+Expected Result
+---------------
+ 58 71 67 36 35 19 60
+ 50 71 71 56 45 20 52
+ 64 40 84 50 51 43 69
+ 31 28 41 54 31 18 33
+ 45 23 46 38 50 43 50
+ 41 10 28 17 33 41 46
+ 66 72 71 38 40 27 69
+
+ 9.636025e+07 320206 -537449 2323650 -1.135486e+07 3.019632e+07
+ -9.650941e+07
+ 4480 15 -25 108 -528 1404 -4487
+-39436 -131 220 -951 4647 -12358 39497
+ 273240 908 -1524 6589 -32198 85625 -273663
+-1846174 -6135 10297 -44519 217549 -578534 1849032
+ 1.315035e+07 43699 -73346 317110 -1549606 4120912 -1.31707e+07
+
+-9.636079e+07 -320208 537452 -2323663 1.135493e+07 -3.019649e+07
+ 9.650995e+07
+ 1
+
+test50.bas
+==========
+Min and max function
+
+Test File
+---------
+print min(1,2)
+print min(2,1)
+print min(-0.3,0.3)
+print min(-0.3,4)
+print max(1,2)
+print max(2,1)
+print max(-0.3,0.3)
+print max(-0.3,4)
+
+Expected Result
+---------------
+ 1
+ 1
+-0.3
+-0.3
+ 2
+ 2
+ 0.3
+ 4
+
+test51.bas
+==========
+Print items
+
+Test File
+---------
+PRINT "Line 1";TAB(78);1.23456789
+
+Expected Result
+---------------
+Line 1
+ 1.234568
+
+test52.bas
+==========
+MAT INPUT
+
+Test File
+---------
+dim a(2,2)
+mat input a
+mat print a
+mat input a
+mat print a
+
+Test File
+---------
+1,2,3,4,5
+1
+3,4
+
+Expected Result
+---------------
+?
+ 1 2
+ 3 4
+? ?
+ 1 0
+ 3 4
diff --git a/apps/examples/bastest/bastest_main.c b/apps/examples/bastest/bastest_main.c
new file mode 100644
index 000000000..fe6da27f8
--- /dev/null
+++ b/apps/examples/bastest/bastest_main.c
@@ -0,0 +1,128 @@
+/****************************************************************************
+ * examples/bastest/bastest_main.c
+ *
+ * Copyright (C) 2014 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/mount.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include <nuttx/fs/ramdisk.h>
+
+#include "romfs.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+/* Check configuration. This is not all of the configuration settings that
+ * are required -- only the more obvious.
+ */
+
+#if CONFIG_NFILE_DESCRIPTORS < 1
+# error "You must provide file descriptors via CONFIG_NFILE_DESCRIPTORS in your configuration file"
+#endif
+
+#ifndef CONFIG_FS_ROMFS
+# error "You must select CONFIG_FS_ROMFS in your configuration file"
+#endif
+
+#ifdef CONFIG_DISABLE_MOUNTPOINT
+# error "You must not disable mountpoints via CONFIG_DISABLE_MOUNTPOINT in your configuration file"
+#endif
+
+/* Describe the ROMFS file system */
+
+#define SECTORSIZE 512
+#define NSECTORS(b) (((b)+SECTORSIZE-1)/SECTORSIZE)
+#define MOUNTPT "/mnt/romfs"
+
+#ifndef CONFIG_EXAMPLES_BASTEST_DEVMINOR
+# define CONFIG_EXAMPLES_BASTEST_DEVMINOR 0
+#endif
+
+#ifndef CONFIG_EXAMPLES_BASTEST_DEVPATH
+# define CONFIG_EXAMPLES_BASTEST_DEVPATH "/dev/ram0"
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * bastest_main
+ ****************************************************************************/
+
+#ifdef CONFIG_BUILD_KERNEL
+int main(int argc, FAR char *argv[])
+#else
+int bastest_main(int argc, char *argv[])
+#endif
+{
+ int ret;
+
+ /* Create a ROM disk for the ROMFS filesystem */
+
+ printf("Registering romdisk at /dev/ram%d\n", CONFIG_EXAMPLES_BASTEST_DEVMINOR);
+ ret = romdisk_register(CONFIG_EXAMPLES_BASTEST_DEVMINOR, (FAR uint8_t *)romfs_img,
+ NSECTORS(romfs_img_len), SECTORSIZE);
+ if (ret < 0)
+ {
+ fprintf(stderr, "ERROR: romdisk_register failed: %d\n", ret);
+ return 1;
+ }
+
+ /* Mount the file system */
+
+ printf("Mounting ROMFS filesystem at target=%s with source=%s\n",
+ MOUNTPT, CONFIG_EXAMPLES_BASTEST_DEVPATH);
+
+ ret = mount(CONFIG_EXAMPLES_BASTEST_DEVPATH, MOUNTPT, "romfs", MS_RDONLY, NULL);
+ if (ret < 0)
+ {
+ fprintf(stderr, "ERROR: mount(%s,%s,romfs) failed: %s\n",
+ CONFIG_EXAMPLES_BASTEST_DEVPATH, MOUNTPT, errno);
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/apps/examples/bastest/tests/test01.bas b/apps/examples/bastest/tests/test01.bas
new file mode 100644
index 000000000..d2c3494e0
--- /dev/null
+++ b/apps/examples/bastest/tests/test01.bas
@@ -0,0 +1,10 @@
+10 a=1
+20 print a
+30 a$="hello"
+40 print a$
+50 a=0.0002
+60 print a
+70 a=2.e-6
+80 print a
+90 a=.2e-6
+100 print a
diff --git a/apps/examples/bastest/tests/test02.bas b/apps/examples/bastest/tests/test02.bas
new file mode 100644
index 000000000..cc8b50ebc
--- /dev/null
+++ b/apps/examples/bastest/tests/test02.bas
@@ -0,0 +1,8 @@
+10 dim a(1)
+20 a(0)=10
+30 a(1)=11
+40 a=12
+50 print a(0)
+60 print a(1)
+70 print a
+
diff --git a/apps/examples/bastest/tests/test03.bas b/apps/examples/bastest/tests/test03.bas
new file mode 100644
index 000000000..5d991d330
--- /dev/null
+++ b/apps/examples/bastest/tests/test03.bas
@@ -0,0 +1,16 @@
+ 10 for i=0 to 10
+ 20 print i
+ 30 if i=5 then exit for
+ 40 next
+ 50 for i=0 to 0
+ 60 print i
+ 70 next I
+ 80 for i=1 to 0 step -1
+ 90 print i
+100 next
+110 for i=1 to 0
+120 print i
+130 next
+140 for i$="" to "aaaaaaaaaa" step "a"
+150 print i$
+160 next
diff --git a/apps/examples/bastest/tests/test04.bas b/apps/examples/bastest/tests/test04.bas
new file mode 100644
index 000000000..f2755e5a9
--- /dev/null
+++ b/apps/examples/bastest/tests/test04.bas
@@ -0,0 +1,6 @@
+10 a=1
+20 repeat
+30 print a
+40 a=a+1
+50 until a=10
+
diff --git a/apps/examples/bastest/tests/test05.bas b/apps/examples/bastest/tests/test05.bas
new file mode 100644
index 000000000..49100a00e
--- /dev/null
+++ b/apps/examples/bastest/tests/test05.bas
@@ -0,0 +1,8 @@
+10 gosub 100
+20 gosub 100
+30 end
+100 gosub 200
+110 gosub 200
+120 return
+200 print "hello, world":return
+
diff --git a/apps/examples/bastest/tests/test06.bas b/apps/examples/bastest/tests/test06.bas
new file mode 100644
index 000000000..ddd6efe78
--- /dev/null
+++ b/apps/examples/bastest/tests/test06.bas
@@ -0,0 +1,12 @@
+10 def fnloop
+20 if n=0.0 then
+30 r=0.0
+40 else
+50 print n
+60 n=n-1.0
+70 r=fnloop()
+80 end if
+90 =r
+100 n=10
+110 print fnloop
+
diff --git a/apps/examples/bastest/tests/test07.bas b/apps/examples/bastest/tests/test07.bas
new file mode 100644
index 000000000..12c0cbdc7
--- /dev/null
+++ b/apps/examples/bastest/tests/test07.bas
@@ -0,0 +1,5 @@
+10 def fna(x)
+20 if x=0 then r=1 else r=x*fna(x-1)
+30 =r
+40 print fna(7)
+
diff --git a/apps/examples/bastest/tests/test08.bas b/apps/examples/bastest/tests/test08.bas
new file mode 100644
index 000000000..0e6f13ad6
--- /dev/null
+++ b/apps/examples/bastest/tests/test08.bas
@@ -0,0 +1,10 @@
+10 data "a",b
+20 data "c","d
+40 read j$
+50 print "j=";j$
+60 restore 20
+70 for i=1 to 3
+80 read j$,k$
+90 print "j=";j$;" k=";k$
+100 next
+
diff --git a/apps/examples/bastest/tests/test09.bas b/apps/examples/bastest/tests/test09.bas
new file mode 100644
index 000000000..7d5f72735
--- /dev/null
+++ b/apps/examples/bastest/tests/test09.bas
@@ -0,0 +1,9 @@
+10 def fna(a)
+20 local b
+30 b=a+1
+40 =b
+60 b=3
+70 print b
+80 print fna(4)
+90 print b
+
diff --git a/apps/examples/bastest/tests/test10.bas b/apps/examples/bastest/tests/test10.bas
new file mode 100644
index 000000000..41a935cca
--- /dev/null
+++ b/apps/examples/bastest/tests/test10.bas
@@ -0,0 +1,31 @@
+ 10 print using "!";"abcdef"
+ 20 print using "\ \";"abcdef"
+ 30 print using "###-";-1
+ 40 print using "###-";0
+ 50 print using "###-";1
+ 60 print using "###+";-1
+ 70 print using "###+";0
+ 80 print using "###+";1
+ 90 print using "#####,";1000
+100 print using "**#,##.##";1000.00
+110 print using "+##.##";1
+120 print using "+##.##";1.23400
+130 print using "+##.##";123.456
+140 print using "+##.";123.456
+150 print using "+##";123.456
+160 print using "abc def ###.## efg";1.3
+170 print using "###.##^^^^^";5
+180 print using "###.##^^^^";1000
+190 print using ".##^^^^";5.0
+200 print using "##^^^^";2.3e-9
+210 print using ".##^^^^";2.3e-9
+220 print using "#.#^^^^";2.3e-9
+230 print using ".####^^^^^";-011466
+240 print using "$*,***,***,***.**";3729825.24
+250 print using "$**********.**";3729825.24
+260 print using "$$###.##";456.78
+270 print using "a!b";"S"
+280 print using "a!b";"S","T"
+290 print using "a!b!c";"S"
+300 print using "a!b!c";"S","T"
+
diff --git a/apps/examples/bastest/tests/test11.bas b/apps/examples/bastest/tests/test11.bas
new file mode 100644
index 000000000..78eb6d1c6
--- /dev/null
+++ b/apps/examples/bastest/tests/test11.bas
@@ -0,0 +1,6 @@
+10 open "i",1,"test.bas"
+20 while not eof(1)
+30 line input #1,a$
+40 print a$
+50 wend
+
diff --git a/apps/examples/bastest/tests/test12.bas b/apps/examples/bastest/tests/test12.bas
new file mode 100644
index 000000000..ecbb9d138
--- /dev/null
+++ b/apps/examples/bastest/tests/test12.bas
@@ -0,0 +1,10 @@
+10 on error print "global handler 1 caught error in line ";erl : resume 30
+20 print mid$("",-1)
+30 on error print "global handler 2 caught error in line ";erl : end
+40 def procx
+50 on error print "local handler caught error in line";erl : goto 70
+60 print 1/0
+70 end proc
+80 procx
+90 print 1 mod 0
+
diff --git a/apps/examples/bastest/tests/test13.bas b/apps/examples/bastest/tests/test13.bas
new file mode 100644
index 000000000..e3be7a00b
--- /dev/null
+++ b/apps/examples/bastest/tests/test13.bas
@@ -0,0 +1,4 @@
+print "a"
+goto 20
+print "b"
+20 print "c"
diff --git a/apps/examples/bastest/tests/test14.bas b/apps/examples/bastest/tests/test14.bas
new file mode 100644
index 000000000..56040112a
--- /dev/null
+++ b/apps/examples/bastest/tests/test14.bas
@@ -0,0 +1,22 @@
+ 10 for i=0 to 9
+ 20 for j=0 to 9
+ 30 print i,j
+ 40 select case i
+ 50 case 0
+ 60 print "i after case 0"
+ 70 case 1
+ 80 print "i after case 1"
+ 90 select case j
+100 case 0
+110 print "j after case 0"
+120 end select
+130 case 3 to 5,7
+140 print "i after case 3 to 5, 7"
+150 case is <9
+160 print "is after case is <9"
+170 case else
+180 print "i after case else"
+190 end select
+200 next
+210 next
+
diff --git a/apps/examples/bastest/tests/test15.bas b/apps/examples/bastest/tests/test15.bas
new file mode 100644
index 000000000..a9195bf4b
--- /dev/null
+++ b/apps/examples/bastest/tests/test15.bas
@@ -0,0 +1,18 @@
+a$="a"
+open "r",1,"test.dat",128
+print "before field a$=";a$
+field #1,10 as a$
+field #1,5 as b$,5 as c$
+lset b$="hi"
+rset c$="ya"
+print "a$=";a$
+put #1
+close #1
+print "after close a$=";a$
+open "r",2,"test.dat",128
+field #2,10 as b$
+get #2
+print "after get b$=";b$
+close #2
+kill "test.dat"
+
diff --git a/apps/examples/bastest/tests/test16.bas b/apps/examples/bastest/tests/test16.bas
new file mode 100644
index 000000000..809137d75
--- /dev/null
+++ b/apps/examples/bastest/tests/test16.bas
@@ -0,0 +1,10 @@
+a=1 : b=2
+print "a=";a;"b=";b
+swap a,b
+print "a=";a;"b=";b
+dim a$(1,1),b$(1,1)
+a$(1,0)="a" : b$(0,1)="b"
+print "a$(1,0)=";a$(1,0);"b$(0,1)=";b$(0,1)
+swap a$(1,0),b$(0,1)
+print "a$(1,0)=";a$(1,0);"b$(0,1)=";b$(0,1)
+
diff --git a/apps/examples/bastest/tests/test17.bas b/apps/examples/bastest/tests/test17.bas
new file mode 100644
index 000000000..bfe0c9c2c
--- /dev/null
+++ b/apps/examples/bastest/tests/test17.bas
@@ -0,0 +1,9 @@
+print "loop started"
+i=1
+do
+ print "i is";i
+ i=i+1
+ if i>10 then exit do
+loop
+print "loop ended"
+
diff --git a/apps/examples/bastest/tests/test18.bas b/apps/examples/bastest/tests/test18.bas
new file mode 100644
index 000000000..73ab93e1b
--- /dev/null
+++ b/apps/examples/bastest/tests/test18.bas
@@ -0,0 +1,13 @@
+print "loop started"
+x$=""
+do while len(x$)<3
+ print "x$ is ";x$
+ x$=x$+"a"
+ y$=""
+ do while len(y$)<2
+ print "y$ is ";y$
+ y$=y$+"b"
+ loop
+loop
+print "loop ended"
+
diff --git a/apps/examples/bastest/tests/test19.bas b/apps/examples/bastest/tests/test19.bas
new file mode 100644
index 000000000..aa19fa4ae
--- /dev/null
+++ b/apps/examples/bastest/tests/test19.bas
@@ -0,0 +1,20 @@
+for x=1 to 3
+ if x=1 then
+ print "1a"
+ else
+ if x=2 then
+ print "2a"
+ else
+ print "3a"
+ end if
+ end if
+next
+
+for x=1 to 3
+ if x=1 then
+ print "1b"
+ elseif x=2 then
+ print "2b"
+ elseif x=3 then print "3b"
+next
+
diff --git a/apps/examples/bastest/tests/test20.bas b/apps/examples/bastest/tests/test20.bas
new file mode 100644
index 000000000..6b982bf89
--- /dev/null
+++ b/apps/examples/bastest/tests/test20.bas
@@ -0,0 +1,11 @@
+ 10 gosub 20
+ 20 gosub 30
+ 30 procb
+ 40 def proca
+ 50 print "hi"
+ 60 stop
+ 70 end proc
+ 80 def procb
+ 90 proca
+100 end proc
+
diff --git a/apps/examples/bastest/tests/test21.bas b/apps/examples/bastest/tests/test21.bas
new file mode 100644
index 000000000..dd0f63beb
--- /dev/null
+++ b/apps/examples/bastest/tests/test21.bas
@@ -0,0 +1,16 @@
+dim a(3,4)
+for i=0 to 3
+ for j=0 to 4
+ a(i,j)=i*10+j
+ print a(i,j);
+ next
+ print
+next
+mat b=a
+for i=0 to 3
+ for j=0 to 4
+ print b(i,j);
+ next
+ print
+next
+
diff --git a/apps/examples/bastest/tests/test22.bas b/apps/examples/bastest/tests/test22.bas
new file mode 100644
index 000000000..e10b03a14
--- /dev/null
+++ b/apps/examples/bastest/tests/test22.bas
@@ -0,0 +1,14 @@
+dim a(2,2)
+for i=0 to 2
+ for j=0 to 2
+ a(i,j)=i*10+j
+ next
+next
+for j=1 to 2
+ for i=1 to 2
+ print using " ##.##";a(i,j),
+ next
+ print
+next
+mat print using " ##.##";a,a
+
diff --git a/apps/examples/bastest/tests/test23.bas b/apps/examples/bastest/tests/test23.bas
new file mode 100644
index 000000000..faf5c5593
--- /dev/null
+++ b/apps/examples/bastest/tests/test23.bas
@@ -0,0 +1,13 @@
+dim a(2,2)
+a(2,2)=2.5
+dim b%(2,2)
+b%(2,2)=3
+mat print a
+mat a=a-b%
+mat print a
+dim c$(2,2)
+c$(2,1)="hi"
+mat print c$
+mat c$=c$+c$
+mat print c$
+
diff --git a/apps/examples/bastest/tests/test24.bas b/apps/examples/bastest/tests/test24.bas
new file mode 100644
index 000000000..95678830b
--- /dev/null
+++ b/apps/examples/bastest/tests/test24.bas
@@ -0,0 +1,8 @@
+10 dim b(2,3),c(3,2)
+20 for i=1 to 2 : for j=1 to 3 : read b(i,j) : next : next
+30 for i=1 to 3 : for j=1 to 2 : read c(i,j) : next : next
+40 mat a=b*c
+50 mat print b,c,a
+60 data 1,2,3,3,2,1
+70 data 1,2,2,1,3,3
+
diff --git a/apps/examples/bastest/tests/test25.bas b/apps/examples/bastest/tests/test25.bas
new file mode 100644
index 000000000..bf4d34c93
--- /dev/null
+++ b/apps/examples/bastest/tests/test25.bas
@@ -0,0 +1,14 @@
+10 dim a(3,3)
+20 for i=1 to 3 : for j=1 to 3 : read a(i,j) : next : next
+30 mat print a
+40 mat a=(3)*a
+45 print
+50 mat print a
+60 data 1,2,3,4,5,6,7,8,9
+80 dim inch_array(5,1),cm_array(5,1)
+90 mat read inch_array
+100 data 1,12,36,100,39.37
+110 mat print inch_array
+120 mat cm_array=(2.54)*inch_array
+130 mat print cm_array
+
diff --git a/apps/examples/bastest/tests/test26.bas b/apps/examples/bastest/tests/test26.bas
new file mode 100644
index 000000000..8055735a1
--- /dev/null
+++ b/apps/examples/bastest/tests/test26.bas
@@ -0,0 +1,5 @@
+dim a(3,3)
+data 5,5,5,8,8,8,3,3
+mat read a(2,3)
+mat print a
+
diff --git a/apps/examples/bastest/tests/test27.bas b/apps/examples/bastest/tests/test27.bas
new file mode 100644
index 000000000..92ba744a8
--- /dev/null
+++ b/apps/examples/bastest/tests/test27.bas
@@ -0,0 +1,8 @@
+data 1,2,3,4
+mat read a(2,2)
+mat print a
+mat b=inv(a)
+mat print b
+mat c=a*b
+mat print c
+
diff --git a/apps/examples/bastest/tests/test28.bas b/apps/examples/bastest/tests/test28.bas
new file mode 100644
index 000000000..d5185ca98
--- /dev/null
+++ b/apps/examples/bastest/tests/test28.bas
@@ -0,0 +1,6 @@
+def fnfac(n)
+ if n=1 then fnreturn 1
+fnend n*fnfac(n-1)
+
+print fnfac(10)
+
diff --git a/apps/examples/bastest/tests/test29.bas b/apps/examples/bastest/tests/test29.bas
new file mode 100644
index 000000000..fbc20942c
--- /dev/null
+++ b/apps/examples/bastest/tests/test29.bas
@@ -0,0 +1,7 @@
+print instr("123456789","456");" = 4?"
+print INSTR("123456789","654");" = 0?"
+print INSTR("1234512345","34");" = 3?"
+print INSTR("1234512345","34",6);" = 8?"
+print INSTR("1234512345","34",6,2);" = 0?"
+print INSTR("1234512345","34",6,4);" = 8?"
+
diff --git a/apps/examples/bastest/tests/test30.bas b/apps/examples/bastest/tests/test30.bas
new file mode 100644
index 000000000..06cea549a
--- /dev/null
+++ b/apps/examples/bastest/tests/test30.bas
@@ -0,0 +1,2 @@
+print 1+"a"
+
diff --git a/apps/examples/bastest/tests/test31.bas b/apps/examples/bastest/tests/test31.bas
new file mode 100644
index 000000000..d168bd072
--- /dev/null
+++ b/apps/examples/bastest/tests/test31.bas
@@ -0,0 +1,7 @@
+10 for i=-8 to 8
+20 x=1+1/3 : y=1 : j=i
+30 for j=i to -1 : x=x/10 : y=y/10 : next
+40 for j=i to 1 step -1 : x=x*10 : y=y*10 : next
+50 print x,y
+60 next
+
diff --git a/apps/examples/bastest/tests/test32.bas b/apps/examples/bastest/tests/test32.bas
new file mode 100644
index 000000000..43fdc4cf5
--- /dev/null
+++ b/apps/examples/bastest/tests/test32.bas
@@ -0,0 +1,8 @@
+PUTS("abc")
+END
+
+SUB PUTS(s$)
+ FOR i=1 to LEN(s$) : print mid$(s$,i,1); : NEXT
+ PRINT
+END SUB
+
diff --git a/apps/examples/bastest/tests/test33.bas b/apps/examples/bastest/tests/test33.bas
new file mode 100644
index 000000000..2d64a4d05
--- /dev/null
+++ b/apps/examples/bastest/tests/test33.bas
@@ -0,0 +1,17 @@
+open "test.out" for binary as 1
+put 1,1,"xy"
+put 1,3,"z!"
+put 1,10,1/3
+put 1,20,9999
+close 1
+open "test.out" for binary as 1
+s$=" "
+get 1,1,s$
+get 1,10,x
+get 1,20,n%
+close
+print s$
+print x
+print n%
+kill "test.out"
+
diff --git a/apps/examples/bastest/tests/test34.bas b/apps/examples/bastest/tests/test34.bas
new file mode 100644
index 000000000..2cd77b914
--- /dev/null
+++ b/apps/examples/bastest/tests/test34.bas
@@ -0,0 +1,18 @@
+option base 3
+dim a(3,5)
+a(3,3)=1
+a(3,5)=2
+
+print a(3,3)
+print a(3,5)
+
+option base -2
+dim b(-1,2)
+b(-2,-2)=10
+b(-1,2)=20
+
+print a(3,3)
+print a(3,5)
+print b(-2,-2)
+print b(-1,2)
+
diff --git a/apps/examples/bastest/tests/test35.bas b/apps/examples/bastest/tests/test35.bas
new file mode 100644
index 000000000..158f20719
--- /dev/null
+++ b/apps/examples/bastest/tests/test35.bas
@@ -0,0 +1,9 @@
+a%=1.2
+print a%
+a%=1.7
+print a%
+a%=-0.2
+print a%
+a%=-0.7
+print a%
+
diff --git a/apps/examples/bastest/tests/test36.bas b/apps/examples/bastest/tests/test36.bas
new file mode 100644
index 000000000..c7bd6f054
--- /dev/null
+++ b/apps/examples/bastest/tests/test36.bas
@@ -0,0 +1,8 @@
+on error goto 10
+print "opening file"
+open "test.out" for output lock write as #1
+print "open succeeded"
+if command$<>"enough" then shell "sh ./test/runbas test.bas enough"
+end
+10 print "open failed"
+
diff --git a/apps/examples/bastest/tests/test37.bas b/apps/examples/bastest/tests/test37.bas
new file mode 100644
index 000000000..80f65a7de
--- /dev/null
+++ b/apps/examples/bastest/tests/test37.bas
@@ -0,0 +1,6 @@
+10 open "i",1,"test.ref"
+20 while not eof(1)
+30 line input #1,a$
+40 if a$="abc" then print a$; else print "def"
+50 wend
+
diff --git a/apps/examples/bastest/tests/test38.bas b/apps/examples/bastest/tests/test38.bas
new file mode 100644
index 000000000..c1b151eee
--- /dev/null
+++ b/apps/examples/bastest/tests/test38.bas
@@ -0,0 +1,9 @@
+dim x(10)
+mat read x
+mat print x
+mat redim x(7)
+mat print x
+mat redim x(12)
+mat print x
+data 1,2,3,4,5,6,7,8,9,10
+
diff --git a/apps/examples/bastest/tests/test39.bas b/apps/examples/bastest/tests/test39.bas
new file mode 100644
index 000000000..076c07be9
--- /dev/null
+++ b/apps/examples/bastest/tests/test39.bas
@@ -0,0 +1,12 @@
+def proc_a(x)
+print fn_b(1,x)
+end proc
+
+def fn_b(a,b)
+= a+fn_c(b)
+
+def fn_c(b)
+= b+3
+
+proc_a(2)
+
diff --git a/apps/examples/bastest/tests/test40.bas b/apps/examples/bastest/tests/test40.bas
new file mode 100644
index 000000000..5ddc05009
--- /dev/null
+++ b/apps/examples/bastest/tests/test40.bas
@@ -0,0 +1,5 @@
+ d=3.1
+ print using "#.#";d
+ print using 10;d
+10 image #.##
+
diff --git a/apps/examples/bastest/tests/test41.bas b/apps/examples/bastest/tests/test41.bas
new file mode 100644
index 000000000..f307a866d
--- /dev/null
+++ b/apps/examples/bastest/tests/test41.bas
@@ -0,0 +1,9 @@
+function f(c)
+print "f running"
+if (c) then f=42 : exit function
+f=43
+end function
+
+print f(0)
+print f(1)
+
diff --git a/apps/examples/bastest/tests/test42.bas b/apps/examples/bastest/tests/test42.bas
new file mode 100644
index 000000000..5be79ac26
--- /dev/null
+++ b/apps/examples/bastest/tests/test42.bas
@@ -0,0 +1,9 @@
+10 print 4.7\3
+20 print -2.3\1
+30 print int(-2.3)
+40 print int(2.3)
+50 print fix(-2.3)
+60 print fix(2.3)
+70 print fp(-2.3)
+80 print fp(2.3)
+
diff --git a/apps/examples/bastest/tests/test43.bas b/apps/examples/bastest/tests/test43.bas
new file mode 100644
index 000000000..26ac0dd02
--- /dev/null
+++ b/apps/examples/bastest/tests/test43.bas
@@ -0,0 +1,16 @@
+DIM a(3,3),b(3,1),c(3,3)
+MAT READ a
+MAT READ b
+MAT c=a*b
+MAT PRINT c
+DATA 1,2,3,4,5,6,7,8,9
+DATA 5,3,2
+
+erase b
+DIM b(3)
+RESTORE
+MAT READ a
+MAT READ b
+MAT c=a*b
+MAT PRINT c
+
diff --git a/apps/examples/bastest/tests/test44.bas b/apps/examples/bastest/tests/test44.bas
new file mode 100644
index 000000000..72cb37ccf
--- /dev/null
+++ b/apps/examples/bastest/tests/test44.bas
@@ -0,0 +1,8 @@
+10 print 10
+20 print 20
+30 print 30
+40 print 40
+50 print 50
+60 print 60
+70 print 70
+
diff --git a/apps/examples/bastest/tests/test45.bas b/apps/examples/bastest/tests/test45.bas
new file mode 100644
index 000000000..cea534dda
--- /dev/null
+++ b/apps/examples/bastest/tests/test45.bas
@@ -0,0 +1,9 @@
+10 mid$(a$,6,4) = "ABCD"
+20 print a$
+30 a$="0123456789"
+40 mid$(a$,6,4) = "ABCD"
+50 print a$
+60 a$="0123456789"
+70 let mid$(a$,6,4) = "ABCD"
+80 print a$
+
diff --git a/apps/examples/bastest/tests/test46.bas b/apps/examples/bastest/tests/test46.bas
new file mode 100644
index 000000000..f7a08468d
--- /dev/null
+++ b/apps/examples/bastest/tests/test46.bas
@@ -0,0 +1,2 @@
+for i=1 to 10:print i;:next i:end
+
diff --git a/apps/examples/bastest/tests/test47.bas b/apps/examples/bastest/tests/test47.bas
new file mode 100644
index 000000000..960ac46c5
--- /dev/null
+++ b/apps/examples/bastest/tests/test47.bas
@@ -0,0 +1,10 @@
+dim a(3,4)
+for i=0 to 3
+ for j=0 to 4
+ a(i,j)=i*10+j
+ print a(i,j);
+ next
+ print
+next
+mat write a
+
diff --git a/apps/examples/bastest/tests/test48.bas b/apps/examples/bastest/tests/test48.bas
new file mode 100644
index 000000000..223bc1c3e
--- /dev/null
+++ b/apps/examples/bastest/tests/test48.bas
@@ -0,0 +1,8 @@
+a,b = 10
+print a,b
+dim c(10)
+a,c(a) = 2
+print a,c(2),c(10)
+a$,b$="test"
+print a$,b$
+
diff --git a/apps/examples/bastest/tests/test49.bas b/apps/examples/bastest/tests/test49.bas
new file mode 100644
index 000000000..d9b167af0
--- /dev/null
+++ b/apps/examples/bastest/tests/test49.bas
@@ -0,0 +1,16 @@
+width 120
+dim a(7,7),b(7,7)
+mat read a
+mat print a;
+print
+data 58,71,67,36,35,19,60
+data 50,71,71,56,45,20,52
+data 64,40,84,50,51,43,69
+data 31,28,41,54,31,18,33
+data 45,23,46,38,50,43,50
+data 41,10,28,17,33,41,46
+data 66,72,71,38,40,27,69
+mat b=inv(a)
+mat print b
+print det
+
diff --git a/apps/examples/bastest/tests/test50.bas b/apps/examples/bastest/tests/test50.bas
new file mode 100644
index 000000000..de12fbe87
--- /dev/null
+++ b/apps/examples/bastest/tests/test50.bas
@@ -0,0 +1,9 @@
+print min(1,2)
+print min(2,1)
+print min(-0.3,0.3)
+print min(-0.3,4)
+print max(1,2)
+print max(2,1)
+print max(-0.3,0.3)
+print max(-0.3,4)
+
diff --git a/apps/examples/bastest/tests/test51.bas b/apps/examples/bastest/tests/test51.bas
new file mode 100644
index 000000000..503cb2693
--- /dev/null
+++ b/apps/examples/bastest/tests/test51.bas
@@ -0,0 +1,2 @@
+PRINT "Line 1";TAB(78);1.23456789
+
diff --git a/apps/examples/bastest/tests/test52.bas b/apps/examples/bastest/tests/test52.bas
new file mode 100644
index 000000000..4470bb5b2
--- /dev/null
+++ b/apps/examples/bastest/tests/test52.bas
@@ -0,0 +1,6 @@
+dim a(2,2)
+mat input a
+mat print a
+mat input a
+mat print a
+