HP Forums

Full Version: Editor/converter/program manager for the Prime Calculator (PrimeComm)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3
Warning: Transfers aren't working with the last 6330 firmware. Other functions may not work with firmware 6330 or latest, please use the official Connectivity Kit.

[Image: Image%202014-03-31%20at%202.58.49%20PM.png]

Version 0.9 b22 (Updated 2014-05-24)
Download: http://servicios.ried.cl/primecomm/Prime...9.22.0.exe
Source: https://github.com/eried/PrimeComm
How it was made: http://ried.cl/en/franqueando-los-secret...a-inversa/
Requires the .Net Framework 4.0 (this is probably already installed in your machine)

The main purpose of this application is to allow the user to send and receive programs from the HP Prime Calculator. Besides this purpose, the application has few handy extra features:
  • Can convert from images1, plain txt, chip8 ROMs, other kinds of hpprgm to a valid (unnamed) hpprgm file (that can be saved, sent to the emulator, device, etc)
  • Includes a code editor (PrimePad), that has line numbers, syntax highlighting and all the features included in PrimeComm, including the conversion from/to differents formats. This editor includes printing and printing preview of the source code for the people who still love using the real-world™ paper.
  • The application can do some refactoring over the programs, as an example: it can remove the comments when you are sending the file to the calculator to save precious flash memory space, rename long variables into an obfuscated one (pattern you can set in the advanced settings), remove empty lines and spaces at your will.
  • The package includes a small brother application for console/automated/batch operations. PrimeCmd uses exactly the same libraries from PrimeComm, so it is merely a layer to access these features in an automated manner.
  • PrimeSkin allows the user to edit the emulator skins.
  • Coming soon: PrimeScreen (screen capturer with fullscreen mode and stream record), more enhancements to PrimePad, etc.

PrimePad is included and has a dynamic reference now!:
[Image: primepad_soon.gif]

[Image: 2014-04-22_1755.png]

Other screens:
[Image: Image%202014-01-05%20at%208.18.00%20PM.png] [Image: Image%202013-12-22%20at%205.15.00%20PM.png] [Image: 2013-12-22_1708.png] [Image: Image%202013-12-11%20at%2011.59.56%20PM.png]

1 ICON (PNG) image mode isn't available due poor description of the encoding (it is "working" but the image isn't properly encoded yet with common png encoders)
Version 0.1: https://www.youtube.com/watch?v=4QGBjOD3LHo (Send and receive)
Version 0.5: https://www.youtube.com/watch?v=FxG-R0QZ-qI (Conversion to plain text)
Version 0.7: https://www.youtube.com/watch?v=UVALe40TPkc (Command server mode)

BTW, I don't use mac nor linux a lot, but .Net is portable to both:
[Image: Image%202013-12-11%20at%2011.50.58%20PM.png]

The problem is... A new hidusb library is required (mainly just the filestream operations, usb enumerations and simple stuff)


*0.9.22 20140423: PrimeHelp now can be closed with ESC (so it can be opened system-wide with ALTGR+. (or F1 inside PrimeComm) and operated by keyboard entirely. New style for PrimePad. New keywords definitions for PrimePad including ALL ones from the calculator's catalog. Small changes in the Settings dialog and a new option to disable the loading of these keywords/styles from external files.

*0.9.21 20140423: PrimeHelp now bundled into PrimeComm and PrimePad (just press F1).


HP Prime Calculator communication library, gui, command line solution
(12-13-2013 03:52 PM)compsystems Wrote: [ -> ]Erwin, enviando la biblioteca de fractales de este mismo foro veo que no se esta decodificando bien el símbolo flecha a la derecha ->, aparece como ?


¿Enviándolo por el portapapeles o usando el hpprgm?
No puedo copiarlo directamente ni al Conn Kit, yo creo que es más problema del foro y la conversión que hace. 'Notepad' soporta unicode y muchos otros formatos.

Si es mas que nada por ese motivo mi interés por hacer PrimeComm. Imaginate este tipo de problemas, sólo para probar un código, debes depurar el código manualmente. Si recibes el txt con primecomm y lo publicas en la web, lo puedes volver a cargar con primecomm: listo, no debes depurar nada. Idealmente me gustaria meter ese txt en un .prime por ejemplo y añadir un xml dentro con la descripción y una captura de pantalla. Así como si fuera un apk de android.
Hey compsystems, creo que ahora ya reparé todo! Big Grin prueba y me dices

Found a little bug in the size calculation and encoding detection. Now it should work wonderfully for *any* encoding (unicode, bigendianunicode, ansi)

¿Puedes grabar ese problema? Con jing o algun programa así
Podríamos organizarnos y crear una lista de comandos, parámetros y ayuda para hacer el editor (el intellisense y eso). Creo que usaré scintilla, es pesado pero poderoso:

[Image: 2013-12-15_1800.png]
Bueno, mi idea realmente no es copiar ese programa. Preferiría añadir snippets en el "intellisense" como lo hacen editores actuales, eclipse, netbeans, vs.
Genial! tengo que revisar como scintilla recibe los datos (podríamos usar el wiki de tiplanet, así se mantiene centralizado). Así ademas hacemos una versión que sirva para hacer otros editores Big Grin

Estaba también avanzando en el capturador (para proyector o hacer "tutoriales"):
[Image: Image%202014-01-02%20at%207.25.33%20PM.png]

Pero aún es primitivo. La primera versión del editor será mas que nada para reemplazar notepad (con highlight de sintaxis), así para lo que tu querías de "nuevo -> enviar"
Hello Erwin!
Very good idea to build a "screen grabber". From what I see you can capture video ... Is this correct?

If you can capture video will be a very good tool for building tutorials.

Good luck with the project!

A hug from Argentina.
(01-02-2014 11:28 PM)ArielPalazzesi Wrote: [ -> ]Hello Erwin!
Very good idea to build a "screen grabber". From what I see you can capture video ... Is this correct?

If you can capture video will be a very good tool for building tutorials.

Good luck with the project!

A hug from Argentina.

Well, that's the idea but I don't want to make it too dependant on video codecs or complex weak stuff so, so in first instance I will save a stream of frames (or maybe an uncompressed/massive avi) Big Grin
Here is how the custom configuration for the program editor works:

Snippets, autocompletion, highlighting, codeblocks, printing is all allowed thanks to scintilla Smile:
[Image: Image%202014-01-04%20at%202.03.00%20PM.png]

Here are some hints about the configuration file (in case someone wants to help to define HPPPL configuration Tongue ):
<?xml version="1.0" encoding="utf-8" ?>
    <Language Name="hpppl">
        <Indentation TabWidth="2" UseTabs="true"/>
        <Lexer LineCommentPrefix="//">
            <Keywords List="0">var</Keywords>
            <Keywords List="1">string</Keywords>
            <Style Name="CHARACTER" ForeColor="Black" BackColor="Red"/>

<Snippet Shortcut="while" IsSurroundsWith="true">WHILE $expression$ DO

Autocomplete (example for CS):
        <AutoComplete FillUpCharacters=".([" SingleLineAccept="True" IsCaseSensitive="False">
                abstract as base break case catch checked continue default delegate do else event explicit extern
                false finally fixed for foreach goto if implicit in interface internal is lock namespace new null
                object operator out override params private protected public readonly ref return sealed sizeof
                stackalloc switch this throw true try typeof unchecked unsafe using virtual while bool byte char
                class const decimal double enum float int long sbyte short static string struct uint ulong ushort void

Incomplete alpha version: http://servicios.ried.cl/primecomm/PrimeComm_alpha.zip (editor works, prints, sends, but does not save/open, etc)
Big Grin es más un IDE/Editor/deployer que un SDK (aunque la terminología pueda dar cabida). Escribiré lo que falta en inglés por si alguien más tiene sugerencias (dado de que entiendes inglés).


Next steps are:

1) Code snippets (scintilla configuration) and keyword autocomplete (maybe local variables too with a simple precompiler)

2) More power tools for the editor, insert image directly (instead of opening it and reusing the code), key override replacements, dumb lexer/precompiler to detect errors early, etc.

3) Symbols toolbox (STO, pi, square root and others). Not sure how is the best efficient way to include them, table matrix docked in the editor window, menu, upper toolbar with few common used symbols and other ones in a popup dialog like in Word->insert symbol.

4) Finish screen capture (my calculator is still in the battery testing procedures! for standby lasting time so this is halted for now)

5) How to include the apps scripts? Autodetect them because the code uses view and stuff? Any suggestion?

6) Real communication with the emulator

7) Adding mono compatible functions (read/write to device) to HidLibrary so the app can works in Linux/MacOs
Hola Erwin, el siguiente es el código de prueba para lo de conversión ASCII 7 bits, hay dos caracteres que no se visualizan bien ( ^-1, i ) ver id1:=X^-1, id5:=i #i

EXPORT test()
LOCAL id0, id1, id2, id3, id4, id5, id6;X;
LOCAL id7, id8, id9, id10, id11, id12, id13;
LOCAL id14, id15, id16;

El código anterior codificado en ASCII 7 bits, util para realizar conversiones a otros BASICs

//ASCII 7 bits
EXPORT test()


LOCAL id0, id1, id2, id3, id4, id5, id6;X;
LOCAL id7, id8, id9, id10, id11, id12, id13;
LOCAL id14, id15, id16;



















Guia de caracteres de conversión del código anterior

\^2\ // superindice2, ver ID0
\^-1\ // superindice-1, ver ID1
\store\ // almacenar, ver ID2
\ee\   // EE , ver ID3
\e\    // #e, ver ID4
\i\    // #i, ver ID5
\!=\    // diferente, ver ID6
\<=\    // menor o igual, ver ID7
\>=\    // mayor o igual, ver ID8
\root\  // raiz, ver ID9
\integral\ // ver ID10
\diff\ // ver ID11 
\/_\ // Angulo ver id12
\pi\ // #pi ver id13
\Sigma\  // sumatoria ver id14
\infinity\ // ver id15
\+-\ // ver id16
No entiendo pero quieres que haga una conversión para TI? Qué utilidad tiene si el lenguaje es distinto? Puedo guardar en 7 bits (ASCII) pero hacer la tabla de conversión suena un poco ya fuera de la utilidad de primecomm
Hola, la conversion a 7 bits, seria útil no solo para portar código hacia calculadoras con BASIC como la serie TI68K, sino ademas a otros BASIC similares e incluso para la HP50G (ALG MODE). La tabla de conversión es simplemente una guía del código que coloque anteriormente

El lenguaje mas parecido a la HP-Prime BASIC es con el TI-BASIC mas info en el siguiente link


Código muy simple en la HP-Prime

export HPBasic_IO_prgm00()
// Comentario del programa
begin // inicio del bloque del contenido del programa
  print(); // Limpia la pantalla terminal
  local id0; // definicion del identificador como variable local
  input(id0); // Pide un dato para ser almacenado en el identificador id0
  print("id0 = "+id0); // Imprime en la pantalla en valor del identificador
end; // fin del bloque del contenido del programa

Código portado a las TI68K

:IO_prgm0() ©  maximo 8 caracteres 
:© Comentario del programa
:Prgm © inicio del bloque del contenido del programa
:   ClrIO © Limpia la pantalla terminal
:   Prompt id0 © Pide un dato para ser almacenado en el identificador id0
:   Disp "id0 = "&id0 © Imprime en la pantalla en valor del identificador
:EndPrgm © fin del bloque del contenido del programa

Diferencias sutiles entre los BASICs
* Los comentarios inician con el simbolo ©
* El encabezado de la funcion es Prgm EndPrgm
* Cada sentencia inicia con :
* Algunos comandos tienen nombres diferentes
* Algunos comandos no requieren parentesis
OK, pero la verdad no sé que relación tiene. Podría meter la simbología de las CASIO y SHARP también, pero ¿no te parecería pérdida de tiempo? Me refiero a que sentido tiene poder guardar un código de Prime para la TI.

Si pones algún ejemplo válido quizás tenga más sentido, pero siendo un código incompatible no veo la diferencia con copiar el código y pegarlo en el editor de TI.
The TI-68k series doesn't use 7-bit ASCII, it uses its own charset; what's more, programs are usually stored under tokenized form.
I am not quite sure how the things works in TI world (but as far I tested: everything is usually limited or obfuscated on purpose; starting with the nasty signature checks for the firmware), but what compsystems is suggesting that I should add a conversion for TI Basic from the program editor... and I am not quite sure how useful is doing something like that.
Realizar un "traductor" de código seria lo ideal, pero requiere de una gran labor por parte del programador, la idea es automatizar un poco la traducción, por que los símbolos como por ejemplo integral, derivada, sumatoria en el ti-basic o HP-basic *(HP50) son simplemente un reemplazo de set del ASCII extentido, es decir modifican la fuente cambiando de símbolo . Si yo copio un codigo de la HP-Prime por estar codificado en UNICODE al copiarlo y pegarlo en el un editor de programas para la TI68K, observare un código ilegible, mientras que si se convierte a ASCII de 7 bits haría visible esos simbolos, aunque sea como \integral\ \diff\ facilitando enormemente el port

Un juego elemental escrito en HPbasic y TIBasic

EXPORT Deducir_Numero()
// Juego Matemático super elemental versión 0.0.6"
   local num_ingresado := 0;
   local total_intentos := 8;
   local intentos := total_intentos;
   local num_secreto := IP( random ( 1, 100 ) ); //  ( rand() mod 100 ) + 1;  // OLD FIRMWARE
   print( "*** Ejecución Iniciada. ***" );
   freeze; wait;
   print( "Juego Matemático versión 0.0.6" );
  print( "El programa genera un numero natural entre 1 y 100. Trate de deducirlo en 8 intentos maximo, o en los que usted configure..." );
   print( "Ingrese el # de intentos personalizados" );
   freeze; wait( 2 );
   if input( total_intentos,"Total de Intentos","Intentos=","Digite un # como total de intentos maximo" )  
then if total_intentos <= 0 then kill; end; 
   intentos := total_intentos;
   //print( "Debug: "+num_secreto );

   if NOT( input( num_ingresado,"Deducir_Numero","Num Ingresado=","Cual es el numero?" ) ) then kill; end;
   print( ">"+num_ingresado );

   while( num_secreto <> num_ingresado and intentos > 1 ) do
      if num_secreto > num_ingresado then
         print( "El numero es mayor" );
         print( "El numero es menor" );
      intentos := intentos - 1;
      print( "Le quedan "+intentos+" intento(s):" );
      freeze;  wait;
      if NOT( input( num_ingresado,"Deducir_Numero","Num Ingresado=","Digite un #" ) ) then kill; end;
      print( ">"+num_ingresado );

   if num_secreto <> num_ingresado then
      print( "Perdio! El numero era: "+num_secreto );
      print( "Gano! Usted lo dedujo en: "+ ( ( total_intentos + 1 ) - intentos ) +" intento(s.)" );
   print( "*** Ejecución Finalizada. ***" );

   return "Done";



redactando ...

If I'm not mistaken, the en

num_secreto local: = (rand () mod 100) + 1;

generates numbers between 1.0 and 2.0 (real numbers with decimals).

[Image: attachment.php?aid=160]

If the game requires numbers between 1 and 100, I think the simplest way is to

num_secreto local: IP = (random (1,100));

returns (natural) numbers between 1 and 100.

In the line

if input( total_intentos,"Total de Intentos","Intentos=","Digite un # como total de intentos maximo" )  
then if total_intentos <= 0 then kill end;

should be

if input( total_intentos,"Total de Intentos","Intentos=","Digite un # como total de intentos maximo" )  
then if total_intentos <= 0 then kill; end;

Am I right?


PS: Sorry about Off Toppic
Pages: 1 2 3
Reference URL's