M4BASIC - hello.m4b
Not logged in
REM Testing 'rem'. We cannot use capitalized keywords in 'rem' statements.

SUB hello()
    PRINT "Hello sub" NL
ENDSUB

CLEAR

REM Testing 'declare'
DECLARE a
DECLARE x TYPE short
DECLARE name TYPE char*
DECLARE e

REM We can delare directly with 'string','float','integer'
STRING ab, bc, some
FLOAT gh, ij
INTEGER kl, mn

REM Testing 'const'
CONST g = 56
CONST i = 57

REM Testing 'let' for numbers
LET a = 0
LET x = 1

REM Testing 'set' for strings
SET name = "Hello cruel world"
SET some = "123"

REM Testing 'print'
PRINT "Hello world.\n"
PRINT "Hello world." NL

REM We can only print strings.
PRINT "The value of 'name' is: " PRINT name NL
PRINT "The value of 'a' is: " PRINT STR(a) NL

REM Or use 'print' with 'format'.
PRINT "The value of 'x' is: ", x FORMAT "%s%d\n"

REM Testing 'while'
WHILE a < 10 DO
    PRINT STR(a) NL
    INCR a, 2
WEND

REM Testing 'if' 'elif' 'else'
IF a > 5 THEN
    PRINT "a is bigger than 5.\n"
ELIF a > 10 THEN
    PRINT "a is bigger than 10.\n"
ELSE
    PRINT "The else clause.\n"
    IF 2 < 3 THEN
        PRINT "2 is smaller than 3.\n"
    ENDIF
ENDIF

REM Testing 'repeat'
REPEAT
    PRINT "Decreasing a: " PRINT STR(a) NL
    DECR a
UNTIL a == 0

REM Testing 'for'
FOR x = 1 TO 5
    PRINT STR(x) NL
NEXT
FOR x = 1 TO 20 STEP 4
    PRINT STR(x) NL
NEXT x

REM Testing some functions
PRINT "sin: ", SIN(x) FORMAT "%s%g\n"
PRINT "cos: ", COS(x) FORMAT "%s%g\n"
PRINT "tan: ", TAN(x) FORMAT "%s%g\n"
PRINT "pow: " PRINT STR(POW(2, 4)) NL
PRINT "sqr: ", SQR(25) FORMAT "%s%g\n"
PRINT "log: ", LOG(1.2345) FORMAT "%s%g\n"
PRINT "exp: ", EXP(x) FORMAT "%s%g\n"
PRINT "round: ", ROUND(5.4321) FORMAT "%s%ld\n"
PRINT "mod: ", MOD(10, 4) FORMAT "%s%ld\n"
PRINT "even: ", EVEN(4) FORMAT "%s%d\n"
PRINT "odd: ", ODD(4) FORMAT "%s%d\n"
PRINT "floor: ", FLOOR(1.654) FORMAT "%s%ld\n"
PRINT "instr: ", INSTR(name, "o") FORMAT "%s%ld\n"
PRINT "asc: ", ASC("@") FORMAT "%s%ld\n"
PRINT "val: ", VAL("1.2345") FORMAT "%s%g\n"
PRINT "str: ", STR(4.56789) FORMAT "%s%s\n"
PRINT "chr: ", CHR(64) FORMAT "%s%s\n"
PRINT "left: ", LEFT(name, 3) FORMAT "%s%s\n"
PRINT "right: ", RIGHT(name, 3) FORMAT "%s%s\n"
PRINT "mid: ", MID(name, 7, 3) FORMAT "%s%s\n"
PRINT "concat: " PRINT CONCAT("Hello ", "World", "123") NL
PRINT "File '/etc/hosts' exists: " PRINT STR(FILEEXISTS("/etc/hosts")) NL

REM Testing 'goto'
GOTO further
    PRINT "Should not be shown.\n"
LABEL further
    PRINT "We went here.\n"

REM Testing 'input'
PRINT "Enter some text... " INPUT name

REM Testing 'equal' and 'len'
PRINT EQUAL(LEFT(name,LEN(name)-1), "Hello") FORMAT "%ld\n"

REM testing 'system' and 'retval'
SYSTEM "ls"
PRINT "return value is: " PRINT STR(RETVAL) NL

REM Testing some file commands
DECLARE p TYPE FILEPTR

OPEN "file.txt" FOR READWRITE AS p

WRITELN "This is a file test\n" TO p
REWIND p
READLN name FROM p

SEEK p OFFSET 5

CLOSE p
PRINT name

REM Testing 'color'
COLOR FOREGROUND TO BLUE

REM Testing 'sleep'
PRINT "Sleeping 100 msecs..." NL SLEEP 100

COLOR RESET

REM Testing 'address'
PRINT STR(ADDRESS(name)) NL

REM Testing 'memory'
MEMTYPE float
INTEGER mem
LET mem = MEMORY(100)

REM Testing 'poke' and 'peek'
POKE mem, 123.123
PRINT "Peek: " PRINT STR(PEEK(mem)) NL

FREE mem

REM Testing 'random'
FOR x = 1 TO 10
    PRINT STR(RANDOM(x)) NL
NEXT

CALL hello()

REM Testing 'deffn'
DEFFN bla(x) = 12 * x
PRINT STR(bla(3)) NL

REM Testing 'getenv'
PRINT GETENV("PATH") NL

REM Tesing 'columns' and 'rows'
PRINT COLUMNS, ROWS FORMAT "Columns: %d - Rows: %d\n"

REM Testing 'end' with optional return status
END 3

Return to M4BASIC