KermMartian wrote:
elfprince13 wrote:
tr1p1ea wrote:
What about an OpenLib/ExecLib interface with DCE8 to enable/disable the various hooks?
... still breaks normal math program that aren't targetting DCSE specifically, and doesn't help the situation on DCS7. At least on DCSE, there aren't non-DCS xlib programs, so you should really just disable the libraries entirely for Basic programs with a DCSE header. Still leaves things a mess on the B/W calcs, and TI still hasn't patched OpenLib( to even work with lowercase letters.
Did you mean disable the libraries entirely for BASIC programs without a DCSE header? Unfortunately, people still make programs that use the xLIBC libraries but don't have the DCSE header and icon. With that being said, I bump my previous proposal:

Ahh, yes, that was what I meant. And...huh, there isn't a stand-alone implementation is there? I feel like accessing basic libraries without a header should be considered unsupported behavior, at least on the 84+CSE, since you don't need to emulate support for pre-DCS xLib programs here.

KermMartian wrote:

KermMartian wrote:
Doors CS 7.2 and Doors CSE 8 both have this. I can detect it and return valid values for complex and imaginary numbers and for all reals except integers 1-14, but dealing with the integers 1-14 properly is harder. tr1p1ea, I recommend we do something about this for Doors CSE 8 ASAP, and figure out what kind of fix to backport later (since it seems not to be a bug people encounter daily (????)). The biggest problems are reals 6, 8, 11, and 14 on the monochrome calculators, and real(9) on the color calculator, since those are the functions that take a single argument. Is there some function that all xLIB-using programs run in practice before using the other real() functions?
In other words, make DCS and DCSE use the normal OS functionality for real() until the first time it is called with multiple arguments, then use the hooked version until the program ends. Honestly, the hardest part would be finding some very safe RAM to store a bit (ie, a binary digit) of state about this. For Doors CS 7 on the monochrome calculators, reals 14, 11, and 8 are the only ones that might be called before a multi-argument real. Doors CSE would be much easier: the online single-argument real() can never be the first xLIBC command called.

If you get this working reliably, it would be great. It would need to work even in the face of reals 14/11/8 to restore functionality for math applications, or for my data structure implementations that use complex numbers to store tuples of pointers (e.g. for left/right tree-node children).

KermMartian wrote:
It would be very cool, but a pretty complex thing to implement. Even manipulating levels from user programs is pretty hard, given that the OS bcalls to work on these tasks are incompletely reverse-engineered and poorly documented. I'd say this is firmly on my long-term feature requests list, unfortunately.

Oh well =(

KermMartian wrote:
01:23 <@KermM> I just wish OpenLib/ExecLib were a lot less broken

Also bump of a previous proposal:
elfprince13 wrote:
Okay, makes sense. I think this reasoning would make even more sense if the OpenLib( call was to a generic shell name that could be configured to pass the program along to a user specified default shell. Is there a clean method to transfer control between apps? This would mean that (a) the polyglot portion of the header was always a fixed size regardless of which shell was being used (and make parsing easier), and (b) that programs wouldn't have to be released in 5 different editions for different shells.

elfprince13 wrote:
What about my idea of implementing a shell-manager app to transfer control to a shell of user's preference?
KermMartian wrote:
TIFreak8x wrote:
Also, can we get something that lets us bump the brightness back and forth 1 level?
It would be more versatile to let programmers set the brightness to an arbitrary value, but I'm hesitant about the ways that that could be abused.


I was just thinking it would be easier to let them bump it up and down instead of having to know what level the brightness is and such, that way a programmer could set it up and down via the - and + keys or something in their project, or call it multiple times to do some form of effect for a game.
I think that could work; the only issue that I can think of is you might have to know what the starting brightness was, in case it was already at the lowest and you wanted to fade out and in...
elfprince13 wrote:
KermMartian wrote:
In other words, make DCS and DCSE use the normal OS functionality for real() until the first time it is called with multiple arguments, then use the hooked version until the program ends. Honestly, the hardest part would be finding some very safe RAM to store a bit (ie, a binary digit) of state about this. For Doors CS 7 on the monochrome calculators, reals 14, 11, and 8 are the only ones that might be called before a multi-argument real. Doors CSE would be much easier: the online single-argument real() can never be the first xLIBC command called.


If you get this working reliably, it would be great. It would need to work even in the face of reals 14/11/8 to restore functionality for math applications, or for my data structure implementations that use complex numbers to store tuples of pointers (e.g. for left/right tree-node children).
The fix is now in place for Doors CSE 8, and it will be released as Doors CSE 8.1.2. Because this is just a change in the dev version (..2) and not the minor version (.1), I can't add any new functions to the xLIBC / Celtic 2 CSE libraries, but I haven't forgotten about those suggestions. I ended up storing the bit to indicate whether Doors CSE should catch real() or not as 0,(iy+asmflags3); xLIBC and Celtic 2 CSE do not currently use asmflags3.
Awesome!
elfprince13 wrote:
Awesome!
Thanks! Can I get any volunteers who use math and/or hybrid BASIC programs on the TI-84+CSE to help me do some sanity-testing to make sure my changes are stable and correct?
My math programs could probably run unaltered, but I don't have a CSE.
I'm not sure if I've asked this before, but I have a feature request: Reading binary data out of an appvar of any length from any location into another appvar. Like readline, but with more control. This would make packing image and other data into a single appvar easier.
This feature request makes me think that over a decade ago, Thomas Nussbaumer (TICT) defined the TTArchive format for packing data into TI-68k files:
https://github.com/debrouxl/gcc4ti/blob/next/trunk/tigcc/tools/ttarchive.h
It was used in e.g. TICT ebooks, for splash screen images + text.

A TTArchive file contains a "tta\0" magic, followed by two bytes containing the number of entries (big endian), followed by entries pointing to data.
Compression of data (with PuCrunch) is mandatory, and obviously, the ttarchive tool can't be used as is for generating TI-Z80 files.

Maybe there are some ideas and code (LGPLv2.1+ with exception allowing redistribution of binaries resulting from building pristine source code) to cribble from there, which is why I'm mentioning TTArchive.
merthsoft wrote:
I'm not sure if I've asked this before, but I have a feature request: Reading binary data out of an appvar of any length from any location into another appvar. Like readline, but with more control. This would make packing image and other data into a single appvar easier.
This is something that is very much needed. It would have made the STEM Behind Hollywood activities much easier; I'm using an ASM stub to essentially do exactly this. One problem: the maximum value for Real arguments that xLIBC/C2CSE can parse is 9999, but the max offset we might want is 2^16-1. How do you propose that programmers specify offsets (and sizes) above 9999?

Lionel Debroux wrote:
A TTArchive file contains a "tta\0" magic, followed by two bytes containing the number of entries (big endian), followed by entries pointing to data.
Compression of data (with PuCrunch) is mandatory, and obviously, the ttarchive tool can't be used as is for generating TI-Z80 files.

Maybe there are some ideas and code (LGPLv2.1+ with exception allowing redistribution of binaries resulting from building pristine source code) to cribble from there, which is why I'm mentioning TTArchive.
This certainly seems like a cool way to handle things, but I worry about the potential complexity of wrapping data in even more metadata. In particular, the second Doors CSE page has only about 1KB free space left, and if we include both new xLIBC/C2CSE functions and CALCnet, it's very likely that we'll have to make Doors CSE 8.2 be a 3-page App. If that happens, we'll of course have tons of space for new functions, but I always try to keep the Doors CS[E] apps to as few pages as possible.
KermMartian wrote:
One problem: the maximum value for Real arguments that xLIBC/C2CSE can parse is 9999, but the max offset we might want is 2^16-1. How do you propose that programmers specify offsets (and sizes) above 9999?
Without knowing exactly why this is the case, I don't know. A couple thoughts, in order of what I like as a consumer of the API:
1) Change the way you're doing parsing so you can do >9999
2) Use Ans/Another variable
3) A string parameter
4) Limit it to 9999, but allow the user to append the data to the end of an appvar so it just takes multiple calls
5) Make it so the passed-in variable in 2^X, so if you pass is 4 it reads 16 bytes, but allow the user to append the data to the end of an appvar so it just takes multiple calls

You should do the second part of #4 anyway, an option to overwrite, and an option to append.
*Bump* Also the ability to enumerate AppVars and Programs would be helpful for custom level sets and such. Especially if built into the API call could be a "Search for this header" parameter.
merthsoft wrote:
1) Change the way you're doing parsing so you can do >9999
2) Use Ans/Another variable
I believe it's a limitation of _ConvOp1, if I recall correctly, so it would require writing a custom version of _ConvOp1 to go past the first two mantissa bytes.
Quote:
3) A string parameter
4) Limit it to 9999, but allow the user to append the data to the end of an appvar so it just takes multiple calls
5) Make it so the passed-in variable in 2^X, so if you pass is 4 it reads 16 bytes, but allow the user to append the data to the end of an appvar so it just takes multiple calls
All of those would work. Actually, my primary concern is a function that will read arbitrary data at an arbitrary offset from an AppVar first; I feel like writing into another AppVar is a secondary concern, since we could technically use InsertLine for that task. Smile
merthsoft wrote:
*Bump* Also the ability to enumerate AppVars and Programs would be helpful for custom level sets and such. Especially if built into the API call could be a "Search for this header" parameter.
I know that this is something tifreak8x wants as well, especially if (opposite of your "especially" clause) it can be told to enumerate all programs and/or AppVars.
KermMartian wrote:
merthsoft wrote:
1) Change the way you're doing parsing so you can do >9999
2) Use Ans/Another variable
I believe it's a limitation of _ConvOp1, if I recall correctly, so it would require writing a custom version of _ConvOp1 to go past the first two mantissa bytes.
Is this hard to do? Is it worthwhile?
KermMartian wrote:
Quote:
3) A string parameter
4) Limit it to 9999, but allow the user to append the data to the end of an appvar so it just takes multiple calls
5) Make it so the passed-in variable in 2^X, so if you pass is 4 it reads 16 bytes, but allow the user to append the data to the end of an appvar so it just takes multiple calls
All of those would work. Actually, my primary concern is a function that will read arbitrary data at an arbitrary offset from an AppVar first; I feel like writing into another AppVar is a secondary concern, since we could technically use InsertLine for that task. Smile
I don't understand. What would you do with the read-in data other than put it somewhere usable? InsertLine has limitations.
KermMartian wrote:
merthsoft wrote:
*Bump* Also the ability to enumerate AppVars and Programs would be helpful for custom level sets and such. Especially if built into the API call could be a "Search for this header" parameter.
I know that this is something tifreak8x wants as well, especially if (opposite of your "especially" clause) it can be told to enumerate all programs and/or AppVars.
I think supporting both modes would be ideal. But being able to parse out ones with a custom header makes it the most useful to me for searching for level sets.
merthsoft wrote:
KermMartian wrote:
merthsoft wrote:
1) Change the way you're doing parsing so you can do >9999
2) Use Ans/Another variable
I believe it's a limitation of _ConvOp1, if I recall correctly, so it would require writing a custom version of _ConvOp1 to go past the first two mantissa bytes.
Is this hard to do? Is it worthwhile?
Yes, and no, respectively. Iambian did it for one of his projects, and based on the size and complexity of the code, I feel like a different solution would be better. Of course, I could always try to use his code, with his permission. This would incidentally also simplify the DispColor call, which breaks its 16-bit arguments into two 8-bit halves. I believe the reason _ConvOP1 works this way is that a 4-digit number is guaranteed to fit into a 16-bit register, while a 5-digit number greater than 65535 would not fit.

Merthsoft wrote:
KermMartian wrote:
Merthsoft wrote:
3) A string parameter
4) Limit it to 9999, but allow the user to append the data to the end of an appvar so it just takes multiple calls
5) Make it so the passed-in variable in 2^X, so if you pass is 4 it reads 16 bytes, but allow the user to append the data to the end of an appvar so it just takes multiple calls
All of those would work. Actually, my primary concern is a function that will read arbitrary data at an arbitrary offset from an AppVar first; I feel like writing into another AppVar is a secondary concern, since we could technically use InsertLine for that task. Smile
I don't understand. What would you do with the read-in data other than put it somewhere usable? InsertLine has limitations.
Put it into a string, just like ReadLine. InsertLine's limitations would be irrelevant if you were using it to insert a single string of data into an otherwise empty AppVar (to, for example, create an xLIBC spritesheet or background image AppVar).
Merthsoft wrote:
KermMartian wrote:
merthsoft wrote:
*Bump* Also the ability to enumerate AppVars and Programs would be helpful for custom level sets and such. Especially if built into the API call could be a "Search for this header" parameter.
I know that this is something tifreak8x wants as well, especially if (opposite of your "especially" clause) it can be told to enumerate all programs and/or AppVars.
I think supporting both modes would be ideal. But being able to parse out ones with a custom header makes it the most useful to me for searching for level sets.
Makes sense; I think I can manage to let the user pass a zero-length string ("") as the custom header to search for. This particular request is not really technically challenging in any way, just a pain to code.
KermMartian wrote:
Yes, and no, respectively. Iambian did it for one of his projects, and based on the size and complexity of the code, I feel like a different solution would be better. Of course, I could always try to use his code, with his permission. This would incidentally also simplify the DispColor call, which breaks its 16-bit arguments into two 8-bit halves. I believe the reason _ConvOP1 works this way is that a 4-digit number is guaranteed to fit into a 16-bit register, while a 5-digit number greater than 65535 would not fit.
If you can borrow his code, I think this is the right approach. It simplifies it for the consumer of the API, which should be the end goal of any API writer. If this doesn't work, then another though I had was variable number of arguments.

KermMartian wrote:
Put it into a string, just like ReadLine. InsertLine's limitations would be irrelevant if you were using it to insert a single string of data into an otherwise empty AppVar (to, for example, create an xLIBC spritesheet or background image AppVar).
This only works if we can do any number of bytes, and aren't limited to 9999. If that limit exists, we'll need an append. Putting binary data into a string seems silly to me--what will that be used for other than something like this? Why would you ever want that data in a string unless it's actually a string, in which case Read/Insert line work just fine.

KermMartian wrote:
Makes sense; I think I can manage to let the user pass a zero-length string ("") as the custom header to search for. This particular request is not really technically challenging in any way, just a pain to code.
Works for me.
Just some wishes:
1: PC to Calc API/Protocol
2: View apps and programs on same screen
3: Background options for home screen
4: Button options
5: Notification icon API

Again, just ideas, but I really would like to emphasize #2. It's really annoying to have all my projects on one screen, and apps on another. It really would be nice to have all of that integrated together.
I've got a problem with doors cse...
Basically, when I tried to transfer a program on my calc to my computer, it says Error: ?. No matter what I do, it will not leave that error and I really dont want to reset because i think one of my larger projects might be cleared.

EDIT: I just checked, and I am using build 1547
Note to self: Add a Hybrid function to check the amount of free RAM, at least; being able to check the amount of free Archive would also be nice. This would have been extremely handy for Zombie Apocalypse Part II. Adding a command to execute a hex string would be really great too.

solarsoftware wrote:
Just some wishes:
1: PC to Calc API/Protocol
CALCnet/gCn will fulfill this request.
solarsoftware wrote:
2: View apps and programs on same screen
This is too technically difficult to be worth it.
solarsoftware wrote:
3: Background options for home screen
It would be cool, but not worth it.
solarsoftware wrote:
4: Button options
What would that be?
solarsoftware wrote:
5: Notification icon API
What would that be?

solarsoftware wrote:
Again, just ideas, but I really would like to emphasize #2. It's really annoying to have all my projects on one screen, and apps on another. It really would be nice to have all of that integrated together.
Unfortunately, this is one of the hardest things to do. I barely think it's worth having Apps be displayed within Doors CSE in the first place, but the people kept asking, so I delivered.

ByteStorm wrote:
I've got a problem with doors cse...
Basically, when I tried to transfer a program on my calc to my computer, it says Error: ?. No matter what I do, it will not leave that error and I really dont want to reset because i think one of my larger projects might be cleared.

EDIT: I just checked, and I am using build 1547
Were you able to resolve this? Do you know what caused it?
Not sure if this would be considered a *bump* on my last post, but I do have some more feature requests. With CALCnet, would it be possible to install apps and programs from within Doors CSE? I had to make a program to receive apps. With this being fulfilled, within Doors itself you could create a "Download Management" button (probably remap button 15 to do this, remap button 13 to create the menu, and an icon for installing apps. Also, could horizontal scrolling be implemented? Finally, can the scrollbar be lot smaller? It takes up about 1/15 of the screen.
Oh, and following up on the Notification API, I finally finished it. I'll upload the programs (when I can figure out how to) and instructions on how to make custom notification icons for Doors programs.
EDIT: added my programs to the archive queue. Will post a link if/when accepted.
  
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
» Goto page Previous  1, 2, 3 ... 8, 9, 10 ... 12, 13, 14  Next
» View previous topic :: View next topic  
Page 9 of 14
» All times are UTC - 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