Login [Register]
Don't have an account? Register now to chat, post, use our tools, and much more.
BasicNote CE

You've probably heard me talk about this program lately. I've been working on it for who knows how long -- well over a year -- and there is still a lot more to do. While I kind of gave up on the original BasicNote for monochrome, I'm planning on developing BasicNote CE much further.

Some eye candy:


And here's a visually pleasing list of questions and answers:

What is BasicNote CE?
BasicNote CE is an advanced note-taking program, written in pure TI-Basic for the TI-84+ CE, not only to serve as a note-editing and note-saving interface, but to prove the possibilities of TI-Basic.

What are a few of the cool features?
►Word Wrapping
►Enter Key Functionality (so, paragraph breaks)
►Storage of multiple notes in one string
►Simulation of default TI kerning, which helps with rendering.
►and more...

When will it be released?
That's hard to tell. I'm currently dealing with the college semester ahead, but I hope to have version 1.0 out by this summer.

What is the current state of the program?
Lots and lots of bugs. I currently need to fix some of the cursor movement, fix character deletion and character insertion, and more.
Despite that, the editing window is already built up quite a bit. I still need to add a menu page to see a list of all the different notes, but that should be fairly easy.

How does this compare to other note-taking programs, like in Assembly or C?
Well... it doesn't. That's just the nature of TI-Basic. While other languages may be faster, I still believe in pushing the limits of TI-Basic, and I hope to make the program as optimized and as fast as possible.

What's the goal of the week?
Fix bugs and clean up code. It's kind of hard to work on something when you've got a messy environment Razz
Hooray! I've been looking forward to this project!
The reason I'm so excited for this one rather than the ASM/C note programs that are out there, is because I can use a computer keyboard to type! Very Happy
EDIT: Are you planning on only using string? Or converting it to a list? Personally I'd like for it to be converted to a list so my notes don't get overwritten by another program!

Good luck with this, if you need any beta testers... well, it's probably a better idea to ask who doesn't want to be a beta tester Razz
That looks really cool! How do you make the text wrap? I'd want to know! Smile Keep it up!
I'm happy to see that you are picking this up once more for the CE this time. I wish you the best of luck with this and am looking forward to checking out the code once it is published somewhere, which I'm sure will be heavily golfed Razz
I kind of wish this was on GitHub or something so I could just grab it and test, but, no... Sad Just Joking

How big is the program currently? How big do you expect it to be?

EDIT: will we be able to somehow extract the data from the string? I wanted to make a program editor in basic, but couldn't get around the fact that the strings' data was completely different from a program's code.
jcgter777 wrote:
Will we be able to somehow extract the data from the string? I wanted to make a program editor in basic, but couldn't get around the fact that the strings' data was completely different from a program's code.


Strings can easily be recalled into programs using the rcl button. To separate lines of code, input the ":" token. An example:


Code:
"Repeat G=105:getKey G:End->Str1


Now, you can recall Str1 in a program. Remember you won't be able to use the store token, so you will have to manually add it to the program later.
dankcalculatorbro wrote:
jcgter777 wrote:
Will we be able to somehow extract the data from the string? I wanted to make a program editor in basic, but couldn't get around the fact that the strings' data was completely different from a program's code.


Strings can easily be recalled into programs using the rcl button. To separate lines of code, input the ":" token. An example:


Code:
"Repeat G=105:getKey G:End->Str1


Now, you can recall Str1 in a program. Remember you won't be able to use the store token, so you will have to manually add it to the program later.


I know that, but in most programs, the strings get messed up with a bunch of stuff, so...
Quote:
Fix bugs and clean up code. It's kind of hard to work on something when you've got a messy environment
Do you have an organized list of bugs somewhere, either in this code, in a tracker, as // comments in your program, or even just on an organized piece of paper? I've discovered in some of my programs that unless I kept careful track of the bugs I (and others) had found, that some would inevitably get forgotten. Plus I love the satisfaction of crossing a challenging bug off a TODO list.
TheLastMillennial wrote:
Are you planning on only using string? Or converting it to a list? Personally I'd like for it to be converted to a list so my notes don't get overwritten by another program!

Yeah, I'll look into some compression to other data types in the future. No promises though. The only other option I would have is to archive the note string.

jcgter777 wrote:
How do you make the text wrap?

Simple - if there's not enough room for more text on the right of the screen, then move everything after the most recent space character onto the next line. In the case that there are no recent space characters, it will simply ignore the text-wrapping routine and continue on.

KermMartian wrote:
Quote:
Fix bugs and clean up code. It's kind of hard to work on something when you've got a messy environment
Do you have an organized list of bugs somewhere, either in this code, in a tracker, as // comments in your program, or even just on an organized piece of paper? I've discovered in some of my programs that unless I kept careful track of the bugs I (and others) had found, that some would inevitably get forgotten. Plus I love the satisfaction of crossing a challenging bug off a TODO list.

I do have several comments throughout my code, but my main bugs list and to-do list are currently stored on my Sticky Notes app on my desktop.
Michael2_3B wrote:
jcgter777 wrote:
How do you make the text wrap?

Simple - if there's not enough room for more text on the right of the screen, then move everything after the most recent space character onto the next line. In the case that there are no recent space characters, it will simply ignore the text-wrapping routine and continue on.

I remember having to make a simple routine that checked whether or not text input reached the end of the screen. How do you handle saving this string and recalling it with word wrap? Does this handle when a word is more than one line long?
JWinslow23 wrote:
Michael2_3B wrote:
jcgter777 wrote:
How do you make the text wrap?

Simple - if there's not enough room for more text on the right of the screen, then move everything after the most recent space character onto the next line. In the case that there are no recent space characters, it will simply ignore the text-wrapping routine and continue on.

I remember having to make a simple routine that checked whether or not text input reached the end of the screen. How do you handle saving this string and recalling it with word wrap? Does this handle when a word is more than one line long?

Every character that the user enters gets added directly onto the note string.
So, whenever a space character is entered, the program saves what position in the string it is at, the X value of the cursor at that spot, and initializes a variable to tell the pixel width since the last space character. If the characters go off the right of the screen, and that pixel width variable is less than a line long, then it takes a substring of the note string starting at the last space character - then displays it on the next line. If the pixel width variable since the last space character is more than one line long, it simply goes to the next line without text wrapping anything.

I hope I made sense...
Hey! So, a little update on what's going on:

-I just got the [Enter] key working, which means you can do paragraph breaks now.
-I added a ton of comments for myself/others on the code, and I'm still trying to fix some of the cursor display issues.
Question: Should I keep the flashing red cursor or make it solid?

Some things that are on the soon to-do list, when I get around to them:
-Character insertion code.
-Character deletion code.
-Note scrolling code

Here's an example of paragraph breaks:


For the curious:
-The note string has delimiters to save where the paragraph breaks are.
-I am using a list which stores the amount of characters on each line, along with the pixel width of each line. For the [enter] key, it simply creates a new element in the list and starts adding to the new element.

I also have a few lines of note rendering code which is currently in a separate program, which I have adapted to make it understand paragraph breaks.

EDIT:
I have mostly finished the character insertion and deletion code, just have a few more things to add and need to polish them up. Also, the cursor movement code is currently begging for an overhaul, and it also needs to be changed to understand paragraph breaks. In addition, (it's a bit hard to describe, but) I need to add an imaginary vertical line for up and down movement, that the cursor tries to stick to, like you see in many famous text editors.

More screenies coming soon - I'm going to try to get CEmu working here in a moment.

Thanks for the support everyone Very Happy
More eye candy! I finally downloaded CEmu Very Happy

This gif shows some of the capabilities so far, including word wrapping, paragraph breaks, backspacing, and inserting. It may look simple on the outside but there is some powerful code behind what you see here.

The second program I ran at the end is the current text rendering code, which is only a few lines long; it uses the CNOTE list and the string to understand what should be displayed where. It will be integrated into the main program at a later date.


Just for the curious, you can view some of what I have for the project here:
https://github.com/Michael2-3B/BasicNoteCE
I was wondering how you'd remember where the line breaks are in word wrapping! This is an awesome project; I can't imagine how much work was put into this. I made a CE text input system for a project of mine (granted, it's not as featureful as this one), so I know this is hard. Good job! Wink
Iíve added some rough page up and page down buttons, and had my first go at implementing scrolling. Still needs some fixing of course, and the rest of the code needs fixing to accommodate the new features Iíve added. More eye candy coming soon!

Iíve had a few people tell me I should be doing this in a more powerful language like Asm or C or ICE, but whereís the point in that? Iíd just be creating an identical text editor like Mateos.

Ti-basic may not be as powerful as other languages, but Iím here to prove it can still do what TextEditor already does (and more) without losing too much speed or quality.
It's prime time for some more programming!!! Here's some more eye candy:



Multiple (infinite?) pages are now implemented, and some scrolling buttons as I mentioned earlier.

Current Goal?
With the new developments of my program, other parts of my code need updating. For example, the code that controls the cursor (where it can go and be displayed, and where in the string it is placed internally) is probably the biggest monster of my program, and doesn't work especially with the new developments. The current goal is to go back and attack this monster before it gets bigger.
Ooooh, this looks super awesome! When rendering any text, does it display the characters one by one or all at the same time with Text( ? Best of luck with this awesome project! Smile
PT_ wrote:
Ooooh, this looks super awesome! When rendering any text, does it display the characters one by one or all at the same time with Text( ? Best of luck with this awesome project! Smile

Each entire row is displayed with the Text( command Smile The text editor itself knows the width of each token (using another string as storage for pixel width info) so that natural spacing can be achieved while writing something.
Progress is somewhat slow but it's getting there; in the past week or so, I've completely redone the cursor movement code, and if I'm correct, it should work flawlessly now. I've tested it over and over and for the moment, there are no issues. As you can see in the screenshot below, I currently have a debugging display at the bottom. The character is the one behind the cursor, and for the curious, the number displayed is the width of the row the cursor is on.

I also started working on the menu just recently, which you can see an example of here:


To-Do List:

    Vertical alignment line for cursor
    Complete deletion and insertion code
    Plan out storage methods -> use list compression?
    Integrate the menu and the editor code
    Optimize program for size and speed
Michael2_3B wrote:

Plan out storage methods -> use list compression?

You could use a method like this to acheive decent list compression (this methode includes unpacking a page at a time into another list for speed):

Code:

L₁(1→X //L₁(1) current file pointer
1→Y
While Y<L₁(2 //number of lines per page
iPart(ʟTEXT(X)/65536→L₁(4
iPart(remainder(ʟTEXT(X),65536)/256→L₁(5
remainder(ʟTEXT(X),256→L₁(6
Str1  //text data to pass to the drawing code
For(A,4,6:Str1+sub(Str2,L₁(A),1→Str1:End //Str1 is text data to pass to the drawing code, Str2 is all the characters that the program will be capable of displaying
Ans→Str1
If max(L₁(3)={L₁(4),L₁(5),L₁(6:Then //L₁(3) line break character
Y+1→Y
//Your line display code here
End
End

DISCLAIMER: Idk much about the CE's internal number system, exept from observation.
Due to the CE's number accuracy, you could squeeze more bytes into one index of the list than three.
However, three is the number of bytes for ICE intergers, which are based on the calc's internal number format. Although, the calc is able to work with numbers much higher than 16777215, so it is more likely a four to six byte format, which would likely include sign and exponent into an extra byte!
So you could also do something like this:

Code:

L₁(1→X //L₁(1) current file pointer
1→Y
While Y<L₁(2 //number of lines per page
iPart(log(abs(ʟTEXT(X→B
Ans+128(not(ʟTEXT(X→L₁(7
abs(ʟTEXT(X))/₁₀^(N→N
iPart(N/65536→L₁(4
iPart(remainder(N,65536)/256→L₁(5
remainder(N,256→L₁(6
For(A,4,7:Str1+sub(Str2,L₁(A),1→Str1:End //Str1 is text data to pass to the drawing code, Str2 is all the characters that the program will be capable of displaying
If max(L₁(3)={L₁(4),L₁(5),L₁(6),L₁(7:Then //L₁(3) line break character
//Your line display code here
Y+1→Y
End
X+1→X
End

And, due to the fact that exponents go into decimals as well: you may be able to get a larger number than 255 from the logarithm plus the sign multiplied by 256, instead of 128.
In other words, EXTRA FORMATTING! Very Happy Razz
  
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 2
» All times are GMT - 5 Hours
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

 

Advertisement