EDIT: Go to the last post for the newest full release. This will include at least a tutorial, command documentation and the latest version of Grammer.This topic is solely for Grammer releases. These can be discussed in this topic. This first version to appear here has the following features:

Version 2.25.03.12I have to rewrite the readme for this thing sometime, it is getting messy...

Updates:I am going to have to rewrite this whole document because it is a mess withinserting new commands everywhere. Anyways, here are useful additions since thelast update:-The user can now use lowercase letters instead of, say, A'. This is the samesize, but looks cleaner.-You can now store Ɵ' and Ans at the same time by defining both vars after →.For example, R*P→aA will store the upper 16-bits of the multiplication in a andthe lower 16-bits in A.-Output(2 is the Text( mode for drawing the fixed font to pixel coordinates-Text( without arguments will return the coordinates as Ans=Y, Ɵ'=X-For the coordinates in a Text( command, you can do relative placement. Forexample, if you want text at 2 pixels below the last drawn text:

:Text(+2,,"2The +2 draws it down 2 pixel from the last location and the empty argument for Xmeans it uses the previous X coordinate. Useful for subscripts and super scripts-You can set the Text( coordinates by using two arguments for Y and X. Forexample:

Version 2.29.04.12I have rewritten the readme, added in support for the menu options, and modified some commands. I tried fixing bugs like the fact that length( wasn't returning what it was supposed to. I also made more arguments optional for certain functions like the sprite and circle commands. Any comments or suggestions can go in the appropriate topic

Version 2.01.05.12I have updated the readme with new info for the new functions. Fix now returns the current state of the modes and you can now use bitlogic to set or reset certain modes. For example, to reset a certain modes, get their mode number and do something like this:

Fix and not(n ;Example, n=6 to enable ON and make the graph screen update normally

To set certain modes, do this:

Fix or n ;Example, n=6 to disable ON and make the screen update inverted

You can also now use RecallPic and StorePic

Finally, the particle engine has been updated! It is now faster (2048 particles in PARTEX2 now is done at 5.66 FPS instead of 3.60 ) and the rules can be changed There are two ways to customise the rules, the easy way being something like this:

EDIT: Updated this download with a critical bugfix with the Send( command. Was v2.50.6.3.EDIT2: Yet more important bugs were fixed, now we are graduating to 2.50.6.7 for this update :|Grammer v2.50.6.4There have been many updates, importantly the version naming convention. In the past, the Grammer version was identified by the date that it was made. Now it is separated into 2.major.minor.veryminor.Updates: This is NOT an exhaustive list.

Older assembly Grammer programs will NOT be compatible with this version or versions going forward.

Grammer is now a 2-page app (32768 bytes), whereas it used to be a 1-page app (16384 bytes).

The main menu has been significantly updated, hopefully for the better.

Added the ▶Nom( ... End block to preserve a set of variables within the block. For example, you can save vars A, B, and C, use them within the block, and they'll be restored when the block ends. This is very useful for subroutines where you may want to use variables without destroying the callee's variables.

Input has been changed! It now has a blinking cursor instead of highlighting the text.

The Input buffer can now be relocated and you can set a max size! Useful for when you want to limit, say, a player's name. Use →Input and →Input'.

The width argument for Pt-Off( is finally meaningful! Sprites can now be drawn to pixel coordinates and be wider (big sprites!).

The Menu( command was totally rewritten. It looks similar, but is a lot smoother and will now scroll if there are too many entries (scrolling menu!). It is also much nicer on RAM usage, so you'll be able to fit more options than previously allowed.

A new menu method is available via Menu('. You can supply a title, location, width, height, and pointers to two Grammer subroutines. The menu will then call your subroutines to get the string to display and the value to return upon selection. Useful for menus that have many options, but options that can be "computed" in some way (for example, reading lines from an external file and supplying those as options).

Grammer v2.50.7.6Over the past ~2 months, a bunch of bugs have been found and fixed, thanks especially to @NonstickAtom785 and Hans Burch. I also updated the main menu and worked more on documentation. From the main menu, you can now use [*] to archive/unarchive, and the [Hook] option was replaced with [More], where you can enable/disable the token hook and lowercase.Some of the bugs fixed are:

Lbl got broken in the previous update, it was fixed for this.

Vertical was buggy, now fixed.

Storing Input to an OS string was broken, now fixed. (it would send too many bytes)

Parsing Input with expr( was broken, it works again.

Archive / Unarchive were messing with some RAM that Grammer occasionally used, causing a crash. This is now fixed.

Fixed a bug with using " to end a string.

Fixed a bug with custom fonts!

Fixed two bugs with Else not being processed properly.

Some other updates:

Variable fonts are now slightly indexed for faster access. Text should display faster with it now.

You can exit the main menu with [On], now.

You can now select with [2nd] from the main menu.

nCr, a routine that might never be used by Grammerians, now only overflows when the final result would actually overflow (before, it could overflow during some intermediate calculations).

Compatibility-breaking updates:

Grayscale is now only offered in 50-50 (3-level) and 33-67 (4-level) modes. I was able to make the LCD update routines faster and smaller. From the old version, presumably nobody would want to use the (uglier) modes anyways.

I broke compatibility with third-party variable-width fonts (all zero of them) made for Grammer. Whereas before, Grammer had a variable font in which each char had its own height and width, now the whole font gets a height byte, and each char gets a width. This seemed a lot more reasonable-- it's a lot easier to program with it, it's a bit faster to access chars, and I could use DrDnar's Monochrome Font Editor

I converted both the fixed 4x6 font to an mfefont, and I totally remade the variable font as an mfefont

Whereas before, the variable width font was sparse (missing many chars), now it is complete!

For <<expr>> is officially documented, and fixed, and now you can nest them.

For <<var>>,0,65535 no longer causes an infinite loop.

Rounded square roots now round in the correct direction.

Yet another If-related bug was fixed, this time the bug was with Then (but not with Then...Else). This bug caused the program to erroneously skip End statements if they were programmed as End:End. Ouch.

!If works again.

A page boundary bug was fixed that could cause major issues when reading variables from archive.

Some other updates:

Modules are no longer verified when calling a module function. Instead, they are verified when they are initialized (ex. "5MYMOD->$) and after verified, Grammer assumes that they remain correct. This reduces some overhead for module functions.