{code}

Learning from Open Source

Contributing

This webpage cannot succeed without volunteer effort. Your help in improving existing or adding new apps is very welcome. Simply contact via  e-mail any apps you think we should add.

Program Template

P+ Template for HP Prime Calculator

This project template for starting your next project for the HP Prime calculator.

P+ Requires the P+ Pre-Processor tool to convert to PPL, or simply download the PPL version:  2023-05-23
main.pp
embed aliases.pp
embed common.pp
embed about.pp

SETUP()
@begin
   if Theme(1) == 1 then
      // Light Mode
   else
      // Dark Mode
   endif;
@end

LOOP()
@begin
@ppl
   RECT();
   DRAWMENU("ABOUT","","","","","EXIT");
   TEXTOUT_P("Copyright © 2023 Insoft. All rights reserved.", 0, 0, 4);
@pp
   while 1 {
      var ?:keycode = WAIT(-1); //  Halts execution until the user presses a key.
      var ?:type = TYPE([keycode]);

      if [type] == ObjectType_Real { // Key Pressed
         if [keycode] == KeyCode_Esc {
            break;
         }

         if [keycode] == KeyCode_App {
            STARTVIEW(-4);
            KILL; 
         }
      }
      
      if [type] == ObjectType_List { // Mouse Input
         if [keycode](1) == Type_MouseClick {
            var x:xAxis = [keycode](2);
            var y:yAxis = [keycode](3);
            var ?:menuItemSelected = MENUITEM([xAxis], [yAxis]);
               
            if [menuItemSelected] == MenuItem_Exit {
               break; 
            }

            if [menuItemSelected] == MenuItem_About {
               @ppl
               ABOUT();
               RECT();
               DRAWMENU("ABOUT","","","","","EXIT");
               @pp
            }               
         }
      }
   }
@end
@ppl
EXPORT START()
BEGIN
   SETUP();
   LOOP();
   STARTVIEW(-1);
END;
aliases.pp
alias MouseType_New        0
alias MouseType_Complete   1
alias MouseType_Drag       2
alias MouseType_Stretch    3
alias MouseType_Rotate     4
alias MouseType_LongCick   5

alias ObjectType_Real     0
alias ObjectType_Integer  1
alias ObjectType_String   2
alias ObjectType_Complex  3
alias ObjectType_Matrix   4
alias ObjectType_Error    5
alias ObjectType_List     6
alias ObjectType_Function 8
alias ObjectType_Unit     9
alias ObjectType_Cas     14


alias Type_MouseDown      0
alias Type_MouseMove      1
alias Type_MouseUp        2
alias Type_MouseClick     3
alias Type_MouseStretch   5
alias Type_MouseRotate    6
alias Type_MouseLongClick 7

alias KeyCode_App     0
alias KeyCode_Symb    1
alias KeyCode_Up      2
alias KeyCode_Help    3
alias KeyCode_Esc     4
alias KeyCode_Plot    5
alias KeyCode_Left    6
alias KeyCode_Right   7
alias KeyCode_View    8
alias KeyCode_Home    9
alias KeyCode_Num     10
alias KeyCode_Down    11
alias KeyCode_Menu    12
alias KeyCode_Cas     13
alias KeyCode_A       14
alias KeyCode_B       15
alias KeyCode_C       16
alias KeyCode_D       17
alias KeyCode_E       18
alias KeyCode_Del     19
alias KeyCode_F       20
alias KeyCode_G       21
alias KeyCode_H       22
alias KeyCode_I       23
alias KeyCode_J       24
alias KeyCode_K       25
alias KeyCode_L       26
alias KeyCode_M       27
alias KeyCode_N       28
alias KeyCode_O       29
alias KeyCode_Enter   30
alias KeyCode_P       31
alias KeyCode_7       32
alias KeyCode_Q       32
alias KeyCode_8       33
alias KeyCode_R       33
alias KeyCode_9       34
alias KeyCode_S       34
alias KeyCode_Div     35
alias KeyCode_T       35
alias KeyCode_Alpha   36 
alias KeyCode_4       37
alias KeyCode_U       37
alias KeyCode_5       38
alias KeyCode_V       38
alias KeyCode_6       39
alias KeyCode_W       39
alias KeyCode_Mult    40
alias KeyCode_X       40
alias KeyCode_Shift   41
alias KeyCode_1       42
alias KeyCode_Y       42
alias KeyCode_2       43
alias KeyCode_Z       43
alias KeyCode_3       44
alias KeyCode_Sub     45
alias KeyCode_On      46
alias KeyCode_Off     46
alias KeyCode_Notes   47
alias KeyCode_Equals  48
alias KeyCode_Minus   49
alias KeyCode_Add     50
alias KeyCode_Ans     50

alias Base_Bin    1
alias Base_Oct    2
alias Base_Hex    3

alias StartView_Symbolic                0
alias StartView_Plot                    1
alias StartView_Numeric                 2
alias StartView_SymbolicSetup           3
alias StartView_PlotSetup               4
alias StartView_NumericSetup            5
alias StartView_AppInfo                 6
alias StartView_ViewsMenu               7
alias StartView_SplitScrPlotDetail      8
alias StartView_SplitScrPlotTable       9
alias StartView_AutoScale               10
alias StartView_Decimal                 11
alias StartView_Integer                 12
alias StartView_Trig                    13
alias StartView_HomeScr                 -1
alias StartView_HomeModes               -2
alias StartView_MemoryManager           -3
alias StartView_AppLibrary              -4
alias StartView_MatrixCatalog           -5
alias StartView_ListCatalog             -6
alias StartView_ProgramCatalog          -7
alias StartView_NotesCatalog            -8

alias Color_Black       0
alias Color_DarkGray    1
alias Color_LightGray   2
alias Color_White       3
common.pp
alias MenuItem_About       1
alias MenuItem_Exit        6
alias MenuItem_Ok          6

DEBOUNCE_MOUSE()
@begin
   var ?:mouse;
   repeat
      MOUSE() => [mouse];
   until SIZE([mouse][1]) == 0;
@end

MENUITEM(x:xAxis,y:yAxis)
@begin
   if [yAxis] < 220 {
      return -1;
   }

   DEBOUNCE_MOUSE();

   if 0 <= [xAxis] <=  51 {
         return 1; 
   }

   if  53 <= [xAxis] <= 104 {
         return 2;
   }

   if 106 <= [xAxis] <= 157 {
         return 3; 
   }

   if 159 <= [xAxis] <= 210 {
         return 4;
   }

   if 212 <= [xAxis] <= 263 {
         return 5;
   }

   if 265 <= [xAxis] <= 319 {
         return 6;
   }

   return -1;
@end
about.pp
ABOUT()
@begin
@ppl
   RECT();
   TEXTOUT_P("HP Prime Application.", 0, 0, 4);
   DRAWMENU("","","","","","OK");
@pp
   while 1 {
      var ?:keycode = WAIT(-1); // Halts execution until the user presses a key.
      var ?:type = TYPE([keycode]);
      
      if [type] == ObjectType_Real && [keycode] == KeyCode_Esc {
         break;
      }

      if [type] == ObjectType_List && [keycode](1) == Type_MouseClick {
         var x:xAxis = [keycode](2);
         var y:yAxis = [keycode](3);

         if MENUITEM([xAxis], [yAxis]) == MenuItem_Ok {
            break; 
         }
      }
   }
@end