Important: See here for how to use this document and known bugs in the current release.
GraphicsLCD.On(...)
and .Off
messages.
Get
message that reads a pre-determined number of bytes into an Array
.
This is much faster than reading single bytes, one at a time.
Element
message allows integer
values of different sizes and different byte ordering to be read out of
a CAN frame. You can read 1, 2 or 4 byte values in big or little
endian format.
CANBus.Debug(1)
is an ative variable containing the number of times
the CANBus receiver's circular buffer has overrun.
VM2 serial numbers take this form: nnnn nnn nnnn an
, where
n
is a digit and a
is a letter. If the very
last digit is 2 or higher then that VM2/VM2-D2 requires the new Flash
driver. The new Flash driver is backwards compatible with old builds.
serial.Done
message for testing completion of RS-485 output.
Send
now returns a boolean success value: 1 on
sucessful sending; 0 if ARP resolution or routing failed.
Status
message has changed and its previous functionality now provided by
Valid
.
Status
message with an earlier version of Venom, you
WILL have to change your code if you upgrade to this or any later version.
Simply replacing Status
with Valid
will retain the previous functionality of your program.
Print
colon options rearranged.
Debug
options rearranged.
Address('S')
sets NO domain name if none
specified.
Period
value defaults to 0 when Get
returns. This is usually what's
needed as the request is likely to be sending or receiving dynamically varying
data, so browsers should never use cached values.
Length
message takes an optional 3rd
parameter to request recursion into subdirectories. A pathname with a wildcard
or referring to a directory will no longer descend into subdirectories
unless this parameter is set.
Make
syntax for USB devices with non-default
parameters has changed, but since the extra parameters are rarely needed and
were not documented it is unlikely that anyone was using them.
Debug(0)
Controls packet Logging to
terminal, and packet logging generally improved to give useful data.
Valid
message returns 1 (true) if the link is working and usable, 0 (false) if not.
Status
message returns different non-zero values to indicate reason
for lack of connection, such as IP address conflict or DHCP failure.
ErrorAction
active variable can be set to 1 to suppress run
time error if an address conflict results from a static IP address assignment. Instead, the new
version of the Status
message can be used to check for a conflict.
WiFiLink
is now a keyword reserved for future use.
Status
returned value includes a new bit to show
USB activity (useful to indicate when cable is disconnected or host has suspended device)
eth.Address('S')
(DHCP/DNS server mode) The limited DNS server provided in this mode now responds with approriate error replies to any unsupported request or a request for an unrecognised domain.
Address('S')
had several bugs in both the DHCP server and limited DNS server code, making this mode too unreliable to use
for many applications.
fs.Find("")
returned 0 instead of 2 (representing root directory) and also left the file system locked.
This.[]Message
This.[^]Message
This.[BaseClass]Message
The functions of the first two forms have been replaced by the new keywords Derived and Base.
The third form has no replacement.
Base.Die
Derived.Die
Make fs FileSystem("flash", cache)
where
cache
is less than 5k,
The filesystem is created with default (70k) cache size instead of
minimum cache size. This provides better compatibility when upgrading
Venom from versions before 2013 05 16, where this value was typically
set to 1 and used as a boolean "use cache" flag.Value(float)
did not skip whitespace.
Parameter
.
This may conflict with existing code if you have Parameter
as a name.
Parameter()
allows you to access the parameters
of a procedure or method by number. The first parameter is Parameter(1)
, the last
is given by Parameter(ParamCount)
.
fs.open
with a third parameter value
of -3 will creat the directory path to that file if the directories
didn't previously exist
die(1)
will destroy the
RAMDISK so it can't be recovered on a subsequent Make
or New
. This may be useful during Application development.
Put
message.
Instead you can use file.Update
(see below) to
update the directory entry when needed.
Connect(2 [,port])
puts the filesystem
into a special file manager mode where it can be controlled via a
serial port. So far the only function available is uploading a file
to the VM2, but renaming, deletion, downloads and file listings are
future possibilities. A Windows command line program is available
to implement the controlling end of the link.
Update
brings directory entry up to date
(file size, date and time information) on a single file without
having to close and re-open. This makes a permanent update on Flash
and RAMdisk file systems, and on all file systems it means that
fs.Length(name)
and fs.Time(name)
will
return updated values for that file.
Find
message can take an optional third
parameter to specify case-insensitive search.
XPos
and YPos
, which read the position of the text cursor
relative to the current TextBox origin.
Is
operator can now work with internal Venom
classes, as well as user-defined classes.
Debug(0, file)
or Debug(0, 0)
control logging of information about packets received and sent for
any IP-based protocol (TCP, UDP).
Debug(2, file)
or
Debug(3, file)
controls packet or
event logging for the HTTP Server's TCP connection.
Put(f, 1)
where f
is a file allows the file to be sent without using chunked coding,
gaining a small speed increase.
The file must be the only response sent in that HTTP transaction.
Count(name)
returns the
number of GET or POST variables matching a name.
Value(1, str)
gets the "filename"
part of the resource requested i.e. everything in the path
following the last '/' character.
Value(name, x, n)
and
Value(name, str, n)
look for the nth
instance of a multiply-defined variable, such as from a form
<SELECT> element with the multiple attribute
set.
Time
with no parameters would incorrectly
give a "write protected" error if the file was opened read-only
Printf("%o", dt)
where dt is a DateTime
object would sometimes print garbage.
Print eth
or
Print eth:2
"sdi2c"
for
Application Board 2 (5902) or any similar circuitry using I2C
digital I/O to detect the card, control power and the "busy" LED.
"sd"
though the old "fsd"
is still accepted.
"mmc"
is no longer accepted as the card type is obsolete,
though MMC cards should still work.
This means that any code such as
Make fs FileSystem("sd"...)
or
Make fs FileSystem("mmc"...)
for the 5902 will have to
change to
Make fs Filesystem("sdi2c")
Sort
message flags.
Status
message will indicate if the card
is present for either type of hardware.
Compare
method. Find
may have an optional
4th parameter to pass as a 3rd parameter to the object's
Compare
method if needed.
Compare
method as an optional
third parameter, enabling different types of comparison to be made for
both Sort
and Find
.
nil
can be used
instead of -1 as a startpos value meaning "use default".
Find
can optionally take a character
(i.e. integer) parameter for the value to find, instead of a string
or buffer.
Mapping
messages lets you change which ASCII
control character codes are mapped to two-byte escape sequences.
In previous versions PPP escaped ALL control characters and this
behaviour wasn't configurable. Now the default behaviour is to
escape XON and XOFF flow control characters only, but the
Mapping
message allows this selection to be changed.
Count
message enables different maximum
limits to be configured for number of configuration messages sent before
failing.
Name
message.
Also in host mode, ppp.Name(s)
where s
is
a string object will copy the currently logged in user name to the string.
Debug
works with different syntax from
that previously documented (which never worked anyway), enabling you
to specify any file for logging TCP packets sent and received, or for
general TCP event logging.
Debug
now works (see "New Features" above)
Find
message with optional start position,
options for forward and reverse search, and binary search if the array
is sorted. String search has an "ignore case" option.
Sort
will sort arrays of integer,
float and string types into ascending or descending order.
String sort has an "ignore case" option.
Sort
message now works on all data types,
including Buffer(Any)
where the elements are any user-defined
class with a Compare
method.
Sort
didn't always sort perfectly,
sometimes leaving a few elements out of place.
TextAnalyser
object could in rare circumstances lead to data corruption in
unpredictable places.
Protect(4, ...)
when a
flash file system did not currently exist would create a corrupted file.
ProtAnalyser
name change: This built-in type is now called TextAnalyser
as this is a more accurate name.
Timeout
message which sets
and returns a timeout value applied to the control and data TCP
connections.
Timeout(1)
set or returns the timeout for
retransmitting configure request messages during LCP and IPCP negotiation.
Default is 3 seconds, but some applications benefit from a longer
timeout.
CRCGenerator(16)
output was was a bitwise inversion
of the CRC-16-CCITT value which it was supposed to provide;
CRCGenerator('M')
for MODBUS CRC was incorrect for
unknown reasons, possibly because it was processing bits in reverse
order. The new algorithm has been verified in a third-party
MODBUS-RTU system.
<<<ID:Embedded text>>>
Make
and Die
processing.
Status(2)
returns number of files open.
fs.Flush
or
fs.Free
in one task while another task was writing to
the same filesystem caused a run time error.
Find
message.
MyOBject.[MyBaseClass]MyMethod
,Name(2, filename)
sets a filename
for downloading dynamically generated content as a filehttp.Match(name, value)
where the
value is a fixed string instead of a variable tests a POST or GET
variable for equality with a specific value, returning 1 for a match.
Redirect(url)
generates the
appropriate response code, headers and content for a simple redirect
to another page. Typically this would be controlled by a POST or
GET variable received when the page is the target of an
HTML <form> element.
Output(0)
enables
arbitrary http headers to be generated by printing them to the http
object. http.Output(1)
switches to normal output mode
for sending the HTTP response entity (e.g. HTML text)
On
and Off
messages
control power to ethernet chip. For systems using a standard
application board but not requiring the ethernet connection, (or not
requiring it all the time), making the ethernet interface and then
switching it off will significantly reduce system power consumption.
Size
message can take optional 2nd
parameter 'K', 'M' or 'G' to specify returned value units of
Kilobytes, Megabytes or Gigabytes. On an SDHC card, the combined
size of several files in bytes (the default) can exceed
the limit of 32 bits, and one of these options is necessary for a
meaningful result.
fs.Valid
message at some other convenient
time, if time permits.
Unsigned
keyword. (Eight-bit arrays are always unsigned;
32-bit arrays are always signed).
FS.Free
on FAT32 SD cards is now
faster.
x == y
, were not detected
and would cause a runtime error due to badly generated code.
MAKE
with DNS and default gateway addresses
parameters didn't apply the DNS and gateway addresses.
Make
statement for flash filesystem,
the optional 2nd parameter is now requested cache size,
not just a true/false flag. In code which explicitly sets the parameter
to 1, this will result in a minimal 5k cache being allocated; while
this will work, applications which write large amounts of data
will benefit from changing this to a larger value or omitting it
whereupon it defaults to 70k.
Has
. This may conflict with existing code if you have
declared a variable with the name has
.
Print eth:2
will print the hostname
supplied for DHCP, if defined
Time
message is identical to UDP
Time
message and saves having to create a UDP object just
to sync the clock to internet time.
eth.Address('M')
controls multicast reception and transmission.
Address(n)
message returns source (n = 0)
or destination (n = 1) address of a received packet.
Valid
message returns bits to indicate
connection validity separately in transmit and receive directions.
Mapping
will assign file system
directories for finding requested resources as files and for
temporary storage of uploaded files, and by setting to
nil
will suppress the searching of the file system for
requested resources and/or forbid the uploading of files.
Has member_name
allows you to check if a user-defined object has a particular member:
If this_object Has XPos
[
]
Find
could cause heap corruption,
especially in a multitasking program
Http.Name
message returns name of uploaded file.
Connect
message waits up to 3 seconds for
link to come up and completes address configuration, returning true on
success. Also the ethernet interface will automatically reconfigure its
address any time the link changes from down to up (e.g. cable
unplugged and replaced)
Task
keyword returns the current task (an object).
State
is a read-write property of Task
objects that can hold 'state' associated with a single task. It usually
makes sense to set a task's State to an instance of a user-defined Class.
Adjust
message now has no effect
on USB and memory card (e.g. SD card) file systems. There was no
pactical use for it on those systems anyway.
Any
. This helps with
code development because there are runtime errors thrown on assigning the
wrong type or reading an un-initialised member. It also helps with
maintenance as the purpose of the member is clearer.
Class MyClass
Parser ProtAnalyser
Encoder Shaft
Port SerialPort
; ...
END
The only exceptions to this are Digital
and
Analogue
: you can specify them but, because in their case the
class name maps to several different internal types, they will be converted
to type Any
internally.
Insert
a single character into a
text Buffer
.
Print
for the
RealTimeClock
allows an offset (in seconds) to be added to the
printed time and date, using a second format specifier:
Print clock:0:TimeZoneOffset
Find("")
or Find("/")
is taken to refer to root directory and therefore returns 2.
Copy
will copy from or to a root
directory, specified by an empty string or "/"
.
Make Ethernet
using DHCP will return quickly if
there is no physical link (e.g. cable unplugged) instead of timing
out waiting for server.
GraphicsLCD.FontData
message will
now also return the address of the font data.
Value
message read a floating
point number it caused Venom2 to crash due to a bug in an internal
text-to-number conversion.
"%+g"
where the result
would come out in exponent notation produced incorrect results.
Get
message gave runtime error if a directory was
requested; now it returns the directory as a request.
Char
is now used as a Venom keyword and
so may not be used as a variable name.
No application code!
will be sent
to the terminal.
Char
as the type specifier, e.g:
Buffer(Char)
f := fs.Open("file.txt",Char)
b := New Buffer(Char)
b.Put("Initial string")
New
, e.g:
Class MyClass
Name New String(50)
; ...
END
The AutoDestruct
property is implicit.
Debug(3) := 8
, or similar.
Debug(3) := 8
, or similar.
Flush
message is no longer supported
by a file object.
Flush
message to a flash file system
updates directory entries for modified open files, but by default
does not cause the (normally non-volatile) cache blocks to be written to flash.
Addition of a non-zero parameter e.g. fs.Flush(1)
will
force the cache to be written to flash memory. For SD and USB file
systems cache flushing is done unconditionally as before.
System.Low
message will find
all the VM2 I/0 channels that have not been explicitly set to an I/O state by
your code up to that point, and set them all to 'input pulled low'. This will
help to reduce the current consumed by the VM2, especially when you are using
low power 'STOP' mode (RealTimeClock.Timeout
).
Debug(21)
to list the states of all I/O channels to find those that
need to be set.
Done
value reported during a FileSystem
Adjust
operation could be incorrect and show over 100%.
(The Protect
command-set may still be used to manage the
application in Flash.)
Protect(4,...)
will create a combined
firmware update file (usually given the extension .VFU) that contains both
your application code and the version of Venom that runs it. It may be used
to program VM2s in production, or for remote firmware update.
Protect(6,1)
returns the version
number of Venom that compiled the application currently in Flash. Returns -1 if no
application in flash.
fs.Valid(s)
, where s is a string or text buffer,
checks the string contains a valid file name - i.e. it is not empty and does not
contain illegal characters.
Format(4)
sets the
number of pixels between tab positions. When a tab character is printed to
the display the cursor will be moved to the right, to the next tab
position. Tab positions are referenced from the LH side of the TextBox or
the last explicit cursor movement.
MAKE
statement
or Address('I')
message.
Copy
message copies files or directories
(including contents, recursively) from one location to another, in
the same file system or between file systems.
Done
message returns estimate of
percentage complete of a Copy
, Empty
or
Adjust
operation running in a separate task.
Find
returns 1 for a plain file,
2 for a directory, and as before 0 if no file found matching the name given.
Cookie
message fetches or creates a cookie
enabling session persistence.
printf("%-0nd", ...)
and
printf("%+07.3f", 0.0)
where padding is not implemented correctly.
True
in Venom has changed from -1 to +1.
This affects both the value of the keyword True
,
and expressions that result in a boolean (True/False) value, such as
x > y
x IsFalse
system.Valid
In rare cases this change may break some code.
The most likely problems will be with code that mistakenly uses
And
or Or
as a logical operator, and also
(legitimately) relies on a non-zero value meaning 'true', for example:
If Buffer.Count And x > y ; Incorrect
If Buffer.Count AndAlso x > y ; Correct
There may also be a very small number of cases where code relies on a True/False result having the numerical value 0 or -1, or uses this result in a further mathematical operation.
DateTime
and RealTimeClock
objects using custom
date and time formatting codes, for example
Print clock : "h:mmaa <on> dddd <the> do MMMM yyyy"
3:05pm on Wednesday the 11th April 2012
List Class
will list all user defined classes in an inheritance tree.
Put
message accepts buffers of 8 bit
integers or text (256 elements maximum) and arrays of 8 bit integers,
in addition to single integers and strings.
Flush
message would update the modification date/time in the
file's directory entry even if the file was unmodified. It now only does
this if the file has actually been modified.
TextBlock
can now have any case. E.g. you can use textblock end
.
Explicit termination strings remain case-sensitive.
%I
will show an integer value as an IP address in conventional
dotted-quad notation like 192.168.1.14.
Class obj : classname
has been removed.
Get
, Put
and Queue
messages to
enable encryption of data in files or communication links.
GraphicsLCD.Bitmap
can now plot
Windows Bitmap format (.BMP) files directly from the Flash Filesystem. Only
the 24- and 32- bits-per-pixel formats are supported. The 32 bpp format has
an 'alpha channel' (i.e. multi-bit transparency), and so renders rounded
buttons, etc, more accurately. There are button-generating websites that
will generate PNG files for many button styles. These may be converted into
32-bit bitmap bitmap images with an alpha channel
(ARGB) using utilities such as Pixelformer.
y := +x
) no longer causes compilation errors.
.Die
to an instance of a
Class, the .Die
message will now only be passed on to
sub-objects that have the AutoDestruct
attribute (see below).
Also, any parameters to .Die
are ignored.
Class MyClass
Global lcd, touch ; List globals that are allowed, or use ALL.
...
TO method
; 'lcd' and 'touch' are declared Global above.
lcd.Pen
evt := touch.Event
; 'clock' is declared global here.
t := Global.clock.Time
END
END
This
,
i.e: This.[BaseClass]msg
, or when asserting 'Class-default'
messages, i.e: AnyObj.[Class]msg
.
AutoDestruct
may be
applied to members of Classes that refer to other objects. It means that
the Class-default Die
message should automatically pass on a
.Die
message to this member.
For example:
MyList Any AutoDestruct ; Remove this on Die
[^]
means 'use the message in the inherited (base) class', so
you don't have to specify the class name explicity.
For example:
This.[^]message
Count
message is now synonymous with
the Length
message for Buffers and Arrays.
.Die
, AutoDestruct
, etc.). This
used to happen when a Buffer of Any or an instance of a user-defined
Class held a 'circular' reference back to itself. Similarly, the
default PRINT for such an object will no longer risk unlimited
recursion.
IS
and Global
have been introduced. If you have used these
as variable names then you will need to ammend your code.
Run, Reset,
Debug, PrintF, Protect
.
DECLARE
: due for removal because it has been superceded
by the Code Analysis tool in VenomIDE.
This
,
or the new operator Global
.
Pre-defined Venom message names, such as Put, Get, Reset, Count
,
etc may now be used for variable names (local or global).
Also, This
is no longer required to refer
to a member of the Class. You can use the member name alone and
it will resolve to This.membername
. The keyword
This
is now only necessary in these circumstances:
This.[inheritance]membername
This
in START
. This feature allows powerful
constructions, including user-defined objects that run in their
own task.
IS
, has been introduced. IS
will return
TRUE
if the preceding expression either is, or
inherits, the named class. For example:
IF obj IS MyClass
[
...
]
Asserted
and
Event
together and they won't interfere.
Assignment
, TextBlock
and
Any
have been introduced. If you have used these as
variable names then you will need to ammend your code.
Any
where Nil
was used before.
E.g:buffer_of_any := NEW Buffer(Any)
.
#UNDEF
instead.
Int
, Float
, String
in any
place where a 'prototype' value is required, for example when making
an Array or Buffer. The Int
keyword may be followed
with the qualifiers 8, 16 or 32 to indicate the size (in bits) of
the datatype being specified, e.g. Int 16
. The type
Int
by itself is equivalent to Int 32
.
The type name Any
is used to indicate any type.
"This is a quoted string" ; Comment
"This is another"
"This is a quoted stringThis is another"
#UNDEF
will remove an existing macro definition.
#REDEFINE
does exactly the same as
#DEFINE
, except that doesn't give a warning if the
definition has changed.
This
from known members or
methods (i.e. those already defined in the current Class or
inherited from a base Class). However, you can force the compiler to
send a message to a derived Class by delaying message
resolution until runtime. The syntax for this uses empty square
brackets:
This.[]Message
@.
'.
MessageRef := @.MessageName
object.!(MessageRef)(Parameters)
Class
. This means that the member's value is
constrained to be an object of a type defined by Class
.
Class XYString
XPos Int
YPos Int
str String ;The following messages are redirected to 'str':
.Put
.Get
.Print
.AcceptPrintJob
.Empty
.Find
END
PRINT/PrintF
commands
within Print methods send text to the output stream that was opened
(explicitly or implicitly) by the calling code.
Ip.Time
to see if a network is connected by trying to
get a response from any node.
On
or
Off
message caused a system crash.
fs.Valid(n)
was leaving file system locked.
PRINT TO
or Put
with a TCP
object was not causing a run time error when the connection was closed or in
the "listening" state.
Class, This,
ParamCount, Initialise, AcceptPrintJob
.
[]
. The new keyword
ParamCount
gives the number of parameters actually
supplied.
Terminal>Settings
dialogue in
VenomIDE.
eth.Address('A')
is a synonym for
eth.Address("DHCP")
(mnemonic: "Automatic")
PRINT
and Printf("%g", ...)
were adding trailing
zeros to digits after the decimal point.
Buffer.Empty(TRUE)
Array.Empty(TRUE)
object.Value
:= 1
are now parsed with the correct precedence.
.Value(n)
message to TouchScreen has now been
replaced by two separate messages: XPos
and
YPos
.
GraphicsLCD
display layouts. However printing numbers
that overwrite each other, or that need to be aligned in columns, is
now much easier.
lcd.Pen
lcd.Pen(FGcol, BGcol)
OperatingSystem.Debug
in the Venom2 Help File.
PRINT "© Café²"
On
message enable automated control of RS-485 transceiver direction at end of
serial transmission
Speed
message sets or returns the SPI clock speed.
Free
now returns available space in kilobytes
(1 KB = 1024 bytes) to avoid 32 bit overflow with SD cards of capacity over 2GB.
Flush
message is now called Empty
.
Only the serial input buffer may be emptied.
Free
message can take a size parameter in
kilobytes; if this is supplied and non-zero, the Free
message
returns TRUE (-1) if the file system's free space equal or exceeds the
value given, FALSE (0) otherwise. The useful side-effect of this is that
the free space computation can be much faster, as the counting of free
blocks stops as soon as a TRUE condition is reached. On large SD cards this
can save several seconds of time.
Valid
message can optionally take a parameter
which makes it perform a consistency check on the file system, with a choice
between a quick check and a through check that can take some time on a
memory card.
TRY
and CATCH
, in which case
AUTODESTRUCT
may be used to clean up dynamic objects
and Lock(0)
may be used to leave any objects in the
unlocked state.
STOP
and STOP ALL
can
be used to stop tasks in your application cleanly, which was not
possible before.
Lock(0)
will be ignored. (It used to wait for the Lock to
be released before doing nothing!) This new behaviour is useful in
handling exceptions, e.g. STOP
.
PrintF("%6.0e", 1.0e-9)
is an example
.vos
and
.vex
in the Flash Filing System) now require CRCs at
the end of the file data. These CRCs will be correctly set when you
produce the files using this version of Venom, or if you download
.vos
files from our website. Debug(16)
. This may be
necessary when using the Remote Firmware Update feature,
Protect(3)
.
fs.Status
or fs.Status(0)
) sets an extra bit: bit
6 (with a value of 64) is set whenever a card is physically present in the the
slot. Thus a card of a type that the VM2 cannot read, such as an SDHC card,
will set this bit but not bit 0, enabling the Venom prgrammer to distinguish
between an invalid card and the absence of any card.
System.Speed
, or just
Speed
) is no longer non-volatile. The VM2 will now always
start up at 72MHz. If you want to run the controller at a lower speed
you must call Speed
in your application code. See the
Venom2 Help file for more details.
OneWire
object type.
Reset
message that is used to
re-initialise the peripheral, particularly if the system clock speed
has changed.
Protect(2)
, Protect(3)
and
GraphicsLCD Bitmap
and Fontdata
.
System.Mapping
message for reserving memory for
Flash File System and RAM disk. This is no longer necessary as non-volatile
memory is now reserved when the objects are created. However, the
new method requires that if you need both RAM disk and Flash File System,
you must create the RAM disk first.
Flush
message
on memory cards before the card is removed or power disconnected. The best
choice of when to do this is entirely application-dependent.
.vos
.
.vex
(Venom Executable).
Protect(2, ...)
.
Protect(3)
from a Venom program.
Flush
message writes cached data to Memory
card or on board flash memory.
startup
procedure now stops the LED
flashing if your main
procedure terminates;
the new line is shown in bold in this extract:
IF Runmode
[ led.Flash($80)
init
main
led.Flash(0)
]
Value
message that returns a fixed string: a string variable must be used.
Alt+0169
.
The new TextBox entity is used to define the extent of printed text. Please see the Venom2 Help file and the Graphical User Interface example applications for more information on this new, central feature.
The existing embedded fonts have been replaced by a more consistent set. A font conversion utility is available to convert .FNT files to Venom font formats.
The Box message now uses relative coordinates to indicate the size of the box.
PRINT TO clock, "2010-04-27 16:05:32"
Address
message
returns the address of the start of the file's data if it is all in
contiguous memory.
YYYY-MM-DD HH:MM:SS
.
's' | Use a string variable instead |
'd', 'h' | Use 10 and 16 instead |
'e', 'f' | Use a float prototype instead |
Many objects are not yet supported fully.
Major Changes | This section lists changes to the language syntax or operation that mean you may have to alter your source code. We will only make changes of this kind where there is an overwhelming advantage to doing so. Check all the Major Changes between the version you have been using and version you want to use. If any of them apply to you, please make sure your application code is changed to suit. | |
---|---|---|
New Features | This section lists features added to the language or objects. | |
Bugs Fixed | This section lists bugs fixed where the bug may have significantly affected use of the system. |