`Lbl L expr(Str8→S expr(Str9→N (S+(N/100))/(N/100)→N {0,.5,1→L₂ NL₂→L₃ Med-Med L₂,L₃,Y₁ Equ►String(Y₁,Str1 sub(Str1,1,length(Str1)-3→Str1 expr(sub(Str1,1,1→N DelVar L₁(length(Str1)-1)/N→dim(L₁ For(E,0,dim(L₁)-1 expr(sub(Str1,2+EN,N→L₁(E+1 End If L1≠LSAVE Then ClrDraw ClrHome Output(1,1,"Your Save File Ouptut(2,1,"Is Corrupted Output(3,1,"Please enter the Output(4,1,"Save Data! Input "ID:", Str8 Input "PIN:", Str9 End If L1≠LSAVE:Goto L`

by the way, nice security function.

I think to make it foolproof is that you editlock the program, and add the ONBLOCK assembly program to it, or run it from a different program (Subprogram), so that way, they can't edit it while running the subprog.

I cannot garentee that this is correct.

:( ]]>

`Save Code as a Number, S SaveList(1)->rand rand/.00001->X .00001iPart(X+(fPart(X)≥.5->X //my short routine for rounding to the nearest n or multiple of n. SX Ans gets stored to the string to be displayed and saved Display the string and X`

My thought is that decryption then just takes an extra input (x) and multiplies the value in the string, then stores it back to the string for putting into the list. I know its not foolproof, but it might work

Edit: Here is what I have now. Thanks to you, its working! Also, if anyone changes the PIN or the Code, it will generally either error out, or create a list with larger dimensions than intended. I can just add a check for the list dimensions after the save is loaded and it should work.

`prgmCREATESAVE 1+int(log(abs(max(L₁→N {0,.5,1→L₂ NL₂→L₃ Med-Med L₂,L₃,Y₁ Equ►String(Y₁,Str1 sub(Str1,1,length(Str1)-3→Str1 For(E,1,dim(L₁ For(I,1,N-(1+int(log(abs(L₁(E Str1+"0→Str1 End L₁(E→X XL₂→L₃ Med-Med L₂,L₃,Y₁ Equ►String(Y₁,Str2 sub(Str2,1,length(Str2)-3→Str2 Str1+Str2→Str1 End sum(L₁→rand rand→X X/.01→X .01iPart(X+(fPart(X)≥.5→X Xexpr(Str1)-X AnsL₂→L₃ Med-Med L₂,L₃,Y₁ Equ►String(Y₁,Str2 sub(Str2,1,length(Str2)-3→Str2 Disp Str2,100X`

`prgmLOADSAVE Input "Code:",S Input "PIN:",N (S+(N/100))/(N/100)→N {0,.5,1→L₂ NL₂→L₃ Med-Med L₂,L₃,Y₁ Equ►String(Y₁,Str1 sub(Str1,1,length(Str1)-3→Str1 expr(sub(Str1,1,1→N DelVar L₁(length(Str1)-1)/N→dim(L₁ For(E,0,dim(L₁)-1 expr(sub(Str1,2+EN,N→L₁(E+1 End`

I assume the longest data point will always be 1-9 digits long.

This code will take a list and turn it into the save code string.

`Input "List:",L1 1+int(log(abs(max(L1→N toString(Ans→Str1 For(E,1,dim(L1 For(I,1,N-(1+int(log(abs(L1(E Str1+"0→Str1 End Str1+toString(L1(E→Str1 End Disp Str1`

Hopefully that helps!

Also, I recommend you encrypt the save code before displaying it. Without this, the user might create their own "save code" to cheat the game.

]]>`Input "Code:",Str1 expr(sub(Str1,1,1→N DelVar L₁(length(Str1)-1)/N→dim(L₁ For(E,0,dim(L₁)-1 expr(sub(Str1,2+EN,N→L₁(E+1 End L₁`

If you want to download the code to turn the data into a list to see how it works, click here

The problem I am having is in actually creating the number. I presume the code would use routines from the number one-liners, and would do something like this:

`Use the Number of Digits in Nonzero Integer routine to determine the longest data point. Store this to String 1 For, each of the data points in the list: Determine the length of that point Determine how many 0's need to be concatenated to make this the same length as the longest data point Append that many 0's onto String 1 Append the Data point onto string 1 End`

I am just having trouble making the function generate the save code. I know it will use the Number-To-String routine, and the routine for determining the Number of Digits in Nonzero Integer. If anyone would be able to help make the function that would turn the string into code, it would be helpful. ]]>