After recently working on a GUI for one of my programs, I decided I wanted to make a more customized method for displaying my name, and so I did, using several unusual symbols, and pixels on/off to make it look a lot better (in my opinion) and then came up with an idea for a new program. I wanted to make a program that will make for other programmers their own signature in the same way I made my own, using symbols and pixels on/off. However, because this program is meant to suit the tastes of many a programmer, I want there to be many options of styles available. And the best way I can think of to make sure I include all options possible, is to ask people to help me design the letters they would like to see in this program. The way it'll work is that you can start it up with a guided mode, or directly input the string that the guided mode would produce to create the code that will make your custom signature. The code would be outputted in a string format that you will paste into your program where you want it.

I'm already working on the GUI for the guided mode, and the code generator won't be too difficult to make, so I don't need any help with the programming, just designs for letters. Of course anyone who contributes letters that haven't already been submitted will be included in the credits. I made a .gif picture with all the default letters upper and lowercase, and my own custom letters, but because I'm new to this forum, I don't know how to add them on, so here's the url of the original post I have with attachments.

http://www.devhardware.com/forums/ti-83-84-102/help-designing-custom-letters-for-a-signature-program-333820.html

I'm still working on a picture to show what the guided mode will look like, so when it's finished I'll post it.
Sounds good, I look forward to the picture. I'll definitely help out with this; I love me some fun pixel art.
So it is like having custom fonts? I might be able to help.
souvik1997 wrote:
So it is like having custom fonts? I might be able to help.
Indeed, but custom fonts to be rendered into images, if I understand correctly (not that they couldn't easily be used for other purposes).
Ooh, this sounds cool... and like I've heard of it before. Speaking specifically about characters being used to make maps. Can't wait to see it Mufin Very Happy

(Btw, welcome to Cemetech! [Oh, and I'm Tanner from IRC btw Wink])
Welcome to Cemetech indeed! I've seen you lurking for many months; I hope you'll participate in our on- and off-topic discussions and share more about this and future projects.
_player1537 wrote:
Ooh, this sounds cool... and like I've heard of it before. Speaking specifically about characters being used to make maps. Can't wait to see it Mufin Very Happy

(Btw, welcome to Cemetech! [Oh, and I'm Tanner from IRC btw Wink])


Yeah, I figured you were Tanner when you knew right away about what I posted on that thread for equation variables. Not quite about maps, but I suppose it could be used for maps. It's mainly to be used for those times you want to make your name to sparkle in a different way from others (default text capital letters, verses mixed case default letters, verses animations like in Angel games) so although this program wouldn't be used often by a programmer, it would become something that most programmers would want to have.

KermMartian wrote:
Welcome to Cemetech indeed! I've seen you lurking for many months; I hope you'll participate in our on- and off-topic discussions and share more about this and future projects.

Hahaha, less so lurking, more of using the Source Coder program on this website. After using it so many times, I figured I ought to register, and after hearing about the activity of this website, figured I may as well start contributing myself.

The forums I usually check are on the DevHardware site, but they have been dying as of late, with almost only me as an active member, with the exception of a handful of others, or passing mods or admins, who have limited knowledge of the TI series. Most of the recent activity is only new members asking a question, saying thanks, then forgetting the url, and even more rarely one of the few regulars will ask the rest of us on a method or optimizing a code, so it's nice to see these forums are so alive. (5 replies, and it hasn't even been a full day!)

But still, back to the reason I've gotten back on. This is largely a program for displaying your name in an unusual way (and by unusual, I mean different from the default) that will give your program more of a professionally done feel to it. Although the program is far from done, here's a sample of it.


Code:

:ClrDraw
:0→C
:0→D
:Text(C,D+1,"O
:Pxl-Off(C+5,D+2
:Text(C,D+3,"Ouf:KO
:Pxl-Off(C+5,D+4
:Pxl-Off(C+1,D+5
:Pxl-Off(C+2,D+7
:Pxl-Off(C+2,D+9
:Pxl-On(C+5,D+14
:Pxl-Off(C+5,D+21
:Text(C,D+22,"O¿F_uf:K
:Pxl-Off(C+5,D+23
:Pxl-Off(C+1,D+24
:Pxl-Off(C+1,D+27
:Pxl-Off(C+3,D+28
:Pxl-Off(C+2,D+36
:Pxl-Off(C+2,D+38
:Pxl-On(C+5,D+43
:{16,45
:For(A,1,dim(Ans
:Pxl-Off(C+1,D+Ans(A
:Pxl-Off(C+1,D+1+Ans(A
:Pxl-Off(C+1,D+2+Ans(A
:Pxl-Off(C+2,D+Ans(A
:Pxl-Off(C+2,D+1+Ans(A
:Pxl-Off(C+2,D+2+Ans(A
:End


It was how I did my name. It uses C and D as variables for the top left corner, so the program can be drastically optimized, but only because when I made it, I was unsure of where in the screen I wanted it to be.

The way I'm going to have the program work is in a format similar to the way this one works. It will output as much text as it can, then turn on and off pixels in order from left to right, then continue with text, and so on, until it reaches the end, and then it will turn off large groups of pixels in the top two rows above a letter, to try and save memory.

As souvik1997 asked, it will be like custom fonts, except choosing which letters from each font you want to use. If you want Bubbly letters, and they are an option, you can use all bubbly letters. If you want every other one to be bold, go for it. I'm going for complete customization, as it is an easy enough concept to program (tell it to add one more of a certain character to the text list, then tell it to add so many more coordinates to the pxl-on and pxl-off lists, then continue with the next letter) so any and all of your custom letters and characters will be accepted.

I have completed programming for the first page in the actual program (not the intro) that displays all the letters in the alphabet numbers 0-9, a plus sign for symbols, and a space button at the bottom, so a concept is far from needed anymore. Instead, I'll just post the source code for it. Again, as I said, it is only the first page which will route the user to each letter and all their options, and I'm planning on actually making the engine this works as more generic engine, so it can be applied for all the letters as well, reducing the need for making more engines to run it. Anyway, here's the program as is, with titles:


Code:

prgmSIGNATUR
:ClrDraw
:0→Xmin
:1→ΔX
:‾62→Ymin
:1→ΔY
:prgmSIGNATR1
:1→D
:1→O
:0→M
:" →Str0
:For(A,0,6
:For(B,0,4
:Pxl-Change(A,B
:End
:End
:Repeat G=45 or G=91
:{6O+5,‾9D,‾9D-10
:Pt-On(Ans(1),Ans(2),3
:Line(Ans(1),Ans(2),Ans(1),1+Ans(2),0
:Pt-On(Ans(1),Ans(3),3
:Line(Ans(1),Ans(3),Ans(1),‾1+Ans(3),0
:Repeat Ans
:getKey→G
:End
:D→F
:O→Q
:If G=22
:Then
:Line(0,‾6,9,‾6,0
:Text(0,0," A 1
:not(M→M
:5M
:Line(Ans,0,Ans+4,0
:Line(Ans+4,0,Ans+4,‾6
:Line(Ans+4,‾6,Ans,‾6
:Line(Ans,‾6,Ans,0
:For(A,1,5
:For(B,5M+1,5M+3
:Pxl-Change(A,B
:End
:End
:End
:If not(M) and max(G={41,42,43,51,52,53,54,55,61,62,63,64,65,71,72,73,74,75,81,82,83,84,85,91,92,93,95}) or M and max(G={72,73,74,82,83,84,92,93,94,95,102
:Then
:If M
:Then
:3→D
:max({1,2,3,4,5,6,7,8,9,10,11}(G={102,92,93,94,82,83,84,72,73,74,95→O
:Else
:max(G={41,42,43,51,52,53,54,55,61,62,63,64,65})+2max(G={71,72,73,74,75,81,82,83,84,85,91,92,93})+3(G=95→D
:G
:If Ans≥71
:max({41,42,43,51,52,53,54,55,61,62,63,64,65,64}(G={71,72,73,74,75,81,82,83,84,85,91,92,93,95→G
:max({0,1,2,3,4,5,6,7,8,9,10,11,12}(G-40={1,2,3,11,12,13,14,15,21,22,23,24,25→O
:End
:26→G
:End
:If max(G={24,25,26,34
:Then
:Pt-Off(6Q+5,‾9F,3
:Pt-Off(6Q+5,‾9F-10,3
:D+(G=34)-(G=25→E
:O+(G=26)-(G=24→P
:{9E+6,6P+4
:If not(E) or not(pxl-Test(Ans(1),Ans(2)) or pxl-Test(Ans(1),Ans(2)+1) or pxl-Test(Ans(1),2+Ans(2
:Then
:If max(G={24,26
:Then
:[[1,13][1,13][2,12][7,7
:Ans(E,1+(P<7→P
:Else
:If not(E
:Then
:{2,3,3,3,4,4,4,4,4,3,3,3,2
:Ans(P→E
:Else
:1→E
:End
:End
:End
:If E=4
:7→P
:E→D
:P→O
:End
:End


And the sub program which displays the first page:

Code:

prgmSIGNATR1
:For(A,0,94)
:Line(A,‾8,A,‾38,0
:End
:Text(0,47,"Choose Letter:
:Line(94,‾7,47,‾7
:Line(47,‾7,40,0
:For(A,0,2
:For(B,1,13
:Text(9A+11,6B+4,sub("ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789+ ",13A+B,1
:End
:End
:Text(38,38,"SPACE
:Line(36,‾39,36,‾45
:Line(36,‾45,42,‾45
:Line(52,‾45,58,‾45
:Line(58,‾45,58,‾39
:Text(46,1,"Preview:
:Line(0,‾45,29,‾45
:Line(29,‾45,37,‾53
:Line(0,‾53,94,‾53
:Text(0,1,"A 1


The controls for the menu was meant to be very intuitive. Of course, up is up, and down is down, and so forth, but beyond that, there is wrapping around the screen, press the mode button to switch between pressing letters to quickly go to that letter against pressing numbers to quickly go to that number.

This engine in particular was rather tricky, because I was trying to keep it simple, without making many exceptions to the rules. So opposed to allowing it to move once it met certain conditions, I came up with a new idea. No matter where you are, you should be able to move, keeping in mind wrapping around the screen, and its only that when the place you're trying to move doesn't have a letter (the 3 pixel tests in one if condition) or tries to go off the screen (E is the down of where it's trying to move to, so when E is zero, which would be off the screen. This part had to be included because if you try to move up when the cursor is below the Choose Letter part in the top right corner, the pixel tests qualify there to be a letter above them) then it will wrap you around the menu.

In the words of a commercial I just saw, I was trying to replace "can't" with "can" by always allowing you to move.

Anywho, I'm going to work on the finishing touches for this engine that will allow me to apply the specific letters to it, instead of the entire alphabet. After that, the only thing I'll really need for the guided menu is the actual letters to put in the program, and then to work on the code generator. I appreciate you guys already offering to pitch in for this project, and again will include all of you in the credits, which will show in the intro screen(s) before this program boots.[/code]
Wow, thanks for the extremely detailed overview; I can't do justice to your post in this paltry reply. Some random thoughts based on your text and code samples:

> Bold and italic: One programmatic way to do bold is print a character, then OR the same char shifted right one pixel, as you probably know; are you implementing that at all? It can have some poorly-rendered component characters though, so I would understand if you chose to have a separate explicit font for bold characters. Similarly, you can emulate italics by shifting the top half of the text to the right by one pixel (or gradated shifting, if it's more than four or five pixels tall). Is that something you have or are considering?
> I like that (if I understand you correctly) you can mix up the letters from different font sets within a single string
> Just to be clear, this is indeed mainly intended for prerendering, correct? It's not really meant for use on-the-fly in a program?
KermMartian wrote:
Wow, thanks for the extremely detailed overview; I can't do justice to your post in this paltry reply. Some random thoughts based on your text and code samples:

> Bold and italic: One programmatic way to do bold is print a character, then OR the same char shifted right one pixel, as you probably know; are you implementing that at all? It can have some poorly-rendered component characters though, so I would understand if you chose to have a separate explicit font for bold characters. Similarly, you can emulate italics by shifting the top half of the text to the right by one pixel (or gradated shifting, if it's more than four or five pixels tall). Is that something you have or are considering?
> I like that (if I understand you correctly) you can mix up the letters from different font sets within a single string
> Just to be clear, this is indeed mainly intended for prerendering, correct? It's not really meant for use on-the-fly in a program?


1) Didn't give it that much thought, but what I've been doing for my current designs is overlooking each individual character for it's own best suited method for optimization, by trying use the best base character (an upside down question mark for a lower case "c") that will require me to turn on and off as few pixels as possible. So, any method that would reduce size would be used, with exceptions of pictures, as I don't want it to require pictures. However that could be an option that the user could enable, now that I think about it...

2) Yes, I look forward to it too. As soon as I made my first, and came up with the idea to make the program, I didn't see the point in limiting the user to my custom tailored font. Rather I wanted it to be about the user's wants, so let it be the fonts they want.

3) Oh yes, absolutely. The final output of the entire program is a string that you would recall into your program, and is code. Imagine the code I posted as what it would return for my name, except in one line, and in quotes, and stored into Str0. Recall that in your program where you want, and you have your (well, actually my) "signature."

The bit that I added with inputting a string is bypassing the GUI, and going straight to the code generator. The GUI will output a string to the generator, which will then create the code at once, so it will be able to keep the number of times it uses Text( to a minimum because it will have a full scope of the entire signature.

The format of the string that will be outputted to the generator I'm going to try to keep in a fairly simple format: "[letter always in uppercase, for sake of memory][U for Uppercase/L for lowercase][# for font, with 0 always being default]"

Whereas, if it's going to be a number: "[number]--"

If someone comes up with new styles for those, then I'll have to have it adopt the letter's method with a number system for which font, 0 being default, but I can't see anyone trying to design a new number for themselves.

The two main things I'm looking forward to in this is that letters that are supposed to have a "tail" below the bottom line for letters ("p" "g" "q") will actually be below the bottom line for letters, which will give the signatures a much more natural look. The other thing is just a geeky thing that I like about this program, and that it's a program that will "be able to program" (in a very, VERY limited way, but still), and the more I think about that the more I want to finish it up already, to watch it fly.

But as is, I just had to help a friend move furniture, and I'm struggling to keep my eyes open after 4 1/2 hours or so of moving large desks, that are currently sitting in the dark, under a blanket, in their basement. I'm going to get back to work on this when I have more energy.

P.S. Yeah, I often will do long posts. I believe Weregoose is on this site as well. He knows of a description for a method I recently discovered, and he (basically) asked me to cut off a few paragraphs of it, because it was so long!
I'm getting my priorities straightened, and worrying less about the menu, and working more on the generator. Now I've run into a bit of a snag with the code generator.

I need to input three variables (one is whether or not the letter is capitalized, so it's either only 0 or 1) and then output either one character or possibly several characters.

The current method I've been trying out is using two matrices (upper case and lower case) with numbers in them. It uses a sequence of prime numbers, and when two characters are used, they are multiplied by each other, so that I can use multiple characters in one cell in a matrix, however I've found that using this method won't let me know which letter comes first (as may be necessary to know for certain letters)

Anyone have any ideas on a different method keeping future expansion in mind?
I think I may understand what you're asking; it would seem the solution would be to treat sequential cells as sequential digits of a base-N number, where each cell can be 0 to n-1. Then, the first digit, call its value A, is just A. The second is B*N, then C*N^2, then D*N^3, etc. This is just how our decimal system works: 1234 is 4+3*10+2*10^2+1*10^3.
I was originally trying to do something similar to that method, however, the problem with that system is that if there was an M that would require 3 characters, then other letters that require only one character would have to go through 1 character and 2 blanks, so that all the letters align correctly.
MufinMcFlufin wrote:
I was originally trying to do something similar to that method, however, the problem with that system is that if there was an M that would require 3 characters, then other letters that require only one character would have to go through 1 character and 2 blanks, so that all the letters align correctly.
I'm still a little bit confused; pardon my bafflement. So the method I presented would require making your system fixed-width, and you want it to be variable-width? Or vice versa?
Trying thinking of this.

The default "M" in the standard (not large) Text( command looks like two lines with two pixels in between, because it's restricted to 15 pixels. I wanted to make an "M" that would have a visible line down the middle. So I used two overlapping "O"s to make a sideways "8" sort of shape, like infinity, except completely square. Then I got rid of two pixels on the bottom, beneath the empty spaces made by the "O"s, and then got rid of one pixel in the top right corner of the letter.

If I wanted the program to know it needed to do all of that, I would need it to first know to display two "O"s, that would overlap. So I would need it to know, first it's trying to display a capital letter (U=1), then I need it to know to reference (inside a matrix) a row designated for all the current letter it wants to display (variable M=13, for letter "M". Purely coincidental the variable is the same as the letter), and then reference which version (V=1, because 0 is default, and I only have one other version of "M" so far) of the letter it wants.

Now, I need it to know if I wanted the default "M", then to return just one "M", but if I choose version 1 of "M", then I need it to return two "O"s.

If I used the system you proposed, then should I want the default "M", it would have to return 13 and 0 ("M" and a blank) on the off-chance that you chose version 1.

Now, if someone made version 2 of "M" require 3 characters, then the default now would have to require 3 characters, and so would version 1.

Do you see, why I'm trying not to use that system?
No, you could still have (say 50 is your max variety of characters):

13 = 0*50^2 + 0*50^1 + 13 = "M" for your default M
765 = 0*50^2 + 15*50^1 + 15 = "OO" for your special M
...continue onwards for three-character variants...
How would one decrypt 765 to {15,15} then?
I'm starting to get this, but I'm still lacking on how this would be done exactly.
MufinMcFlufin wrote:
How would one decrypt 765 to {15,15} then?
I'm starting to get this, but I'm still lacking on how this would be done exactly.
Basically, for the number of digits you have, you repeatedly divide by 50, take the fPart off, and multiply that piece by 50. First you'll get the ones place, then the 50^1 place, then the 50^2 place, etc.
You just made something that was completely foreign to me, just sound very easy, I hope you know that.

But still, I'm still not sure how many characters I'm going to need. At least 52, for all the letters of the alphabet, upper and lower case, then so far around 10 symbols, but I can't be sure until people submit pixel art of the letters they want to see in the program.
MufinMcFlufin wrote:
You just made something that was completely foreign to me, just sound very easy, I hope you know that.

But still, I'm still not sure how many characters I'm going to need. At least 52, for all the letters of the alphabet, upper and lower case, then so far around 10 symbols, but I can't be sure until people submit pixel art of the letters they want to see in the program.
Then leave the number 50 (or whatever) as a variable so you can keep changing it.
Well, I've used your method and inputted most all of the characters for each letter so far, and I'm using the same method for where to modify pixels, so almost all of the current raw data is in their according matrices. After that's finished, I'm going to work on a coordinates system so it knows where on the screen to display all the text, and then finally have it modify the string it will output.

I also made a little program to help me with using the best characters as a base for new characters. You draw the letter you want, then it checks how similar it is to each of the 208 usable characters, and then displays which character has the fewest number of pixels that are different from the drawn character you provided. It's proven to be quite useful, and has helped me reduce the number of pixels I would need to modify for several letters. Here's that program:

Code:


:ClrDraw
:0→Xmin
:1→ΔX
:‾62→Ymin
:1→ΔY
:Line(0,0,16,0
:Line(16,0,16,‾10
:Line(16,‾10,0,‾10
:Line(0,‾10,0,0
:Line(8,‾10,8,0
:1→D
:9→O
:Repeat G=105
:Pxl-Change(D,O
:Repeat Ans
:getKey→G
:End
:If max(G={24,25,26,34
:Then
:D+(G=34 and D≠9)-(G=25 and D≠1→D
:O+(G=26 and O≠15)-(G=24 and O≠9→O
:End
:End
:208→dim(L1
:Fill(0,L1
:For(A,1,208
:Text(1,2,"     
:Text(1,2,sub(Str1,A,1
:Text(1,20,int(25A/52),"%
:For(D,2,8
:For(O,2,6
:L1(A)+(pxl-Test(D,O)=pxl-Test(D,O+8→L1(A
:End
:End
:End
:Text(1,2,"   
:max(seq(A,A,1,208)(L1=max(L1
:Text(1,2,sub(Str1,Ans,1
:Text(11,1,sub(Str1,Ans,1
:Text(17,1,Ans

It's isn't terribly fast, considering it has to check 50 or so pixels, but it's effective and adding a little percentage complete thing helped with knowing about how long it'll take. (1-2 minutes, 3 minutes tops) It only works for one character letters, so a maximum of 5 letters in length for this little checker program.

A working model of the generator (without menu) will be complete soon, so it would be nice if people started uploading their own letters to be in the program. The limits are that it has to be 7 or less pixels in height (5 preferably) and 1 to 5 pixels in width. In theory it should be able to handle many characters slightly overlapping (the overlapping character on top of the left most column of pixels of the previous character), but I'm really not sure how it will react to multiple letters trying to overlap, and I really only want to worry about it when the time comes.

So again, please post the letters you want to see in this program! Here are my current letters, with all the default letters on the left, and then my current ones to the right, and as letters are added to the program, so they will be added to this image. Due to how large the image is, I figured it'd probably be best to make this a link for now, unless you guys don't mind me posting an image of all the letters as small as they should be, as opposed to the current 3 times larger so it's easier to see.
Here it is.
  
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 4
» 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