Really neat.
Nice, but things have become so much more complicated recently.
- Pauli
Thanks for sharing. It would be interesting to add the option to browse through the table to select the element. I'm trying to do this in a program but I have not gotten it to work well yet. A little help on programming with cursors and pointers in HP Prime would be welcome.
Regards
Very nice!
Awesome! Good job!
Yes! Very nice and thanks!
:) LOL
Edited: 19 Oct 2013, 11:06 a.m.
Hi Mic,
Great work, go ahead !!
jose
Haha, great !
Here you go. Thanks Mic for the great starting point for this example.
That puts all the drawing into a single draw function, uses a program variable rather then globals for data, allows clicking on an element, and dragging the table.
Still plenty rough as there are not any error checks or limits, but should provide a good starting point.
===================================================================================
symbol:={"H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu",
"Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr","Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba",
"La","Ce","Pr","Nd","Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Tl","Pb","Bi",
"Po","At","Rn","Fr","Ra","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm","Md","No","Lr","Rf","Db","Sg","Bh","Hs","Mt","Ds","Rg","Cn"};l0:={1,16,3,10,8,10,72,27,14,4,14,0};
//color
m1:={#00EE00,#66AAFF,#FFAA00,#F3F300,#FFC1DC,#00DDBB,#FF93C2,#99BBAA,#B2AAFF,#B2F0FF};m2:={1,2,3,4,7,1,1,1,8,2,3,4,6,7,1,1,8,2,3,4,5,5,5,5,5,5,5,5,5,5,6,7
,7,1,8,2,3,4,5,5,5,5,5,5,5,5,5,5,6,6,7,7,8,2,3,4,9,9,9,9,9,9,9,9,9,9
,9,9,9,9,9,5,5,5,5,5,5,5,5,5,6,6,6,7,8,2,3,4,10,10,10,10,10,10,10,10
,10,10,10,10,10,10,10,5,5,5,5,5,5,5,5,5};//position
position:= [
[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 ],
3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10,
11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
87, 88, 89,104,105,106,107,108,109,110,111,112, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 0,
0, 0, 0, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103, 0
];startX:=2,startY:=2,width:=22,height:=21;
offset:=0; //offest for graphical shift
selEl:=1; //selected elementDrawTable()
begin
DIMGROB_P(G1,320,220); RECT(G1);
local x:=startX-offset,y:=startY,i,j;
local tablePos=1;
for j:=1 to 10 do
for i:=1 to 18 do
if tablePos:=position(j,i) then
RECT_P(G1,x,y,x+width,y+height,RGB(0,0,0),m1(m2(tablePos)));
if selEl== tablePos then
RECT_P(G1,x+1,y+1,x+width-1,y+height-1,RGB(0,0,0),RGB(0,0,0,255));
end;
TEXTOUT_P(tablePos,G1,x+2,y+1,1);
TEXTOUT_P(symbol(tablePos),G1,x+8,y+10,1);
end;
x:=x+width;
end;
x:=x-18*width;
y:=y+height;
end;
x:=2*width-offset+width/4+startX; y:=7*height+startY;LINE_P(G1,x,y,x,y+2*height+height/2);
LINE_P(G1,x,y+2*height+height/2,x+width*3/4,y+2*height+height/2);
x:=x+width/2;
LINE_P(G1,x,y,x,y+height+height/2);
LINE_P(G1,x,y+height+height/2,x+width/4,y+height+height/2);
blit_p(G0,G1);
end;FindEl(x,y)
begin
local el,tempX:=(x-startX+offset)/width,tempY:=(y-startY)/height;return position(ip(tempY)+1,ip(tempX)+1);
end;EXPORT elements()
BEGIN
DrawTable();
DRAWMENU("1");
local touch;
WHILE 1 DO
blit_p(G0,G1,0,0);
touch:=mouse();
if size(touch(1)) then //something in our mouse
case
if touch(1,5)==0 then //touch
local el:= FindEl(touch(1,1),touch(1,2));
if el then
selEl:=el;
DrawTable();
end;
end;
if touch(1,5)==1 then "incomplete" end;
if touch(1,5)==2 then //drag
offset:=touch(1,3)-touch(1,1);
DrawTable();
end;
if touch(1,5)==3 then return "stretch"; end;
if touch(1,5)==4 then return "rotate"; end;
if touch(1,5)==5 then return "long click"; end;
end;
end;
END;
END;
TW
Edited: 19 Oct 2013, 2:21 p.m.
It's wonderful that you've enlightened us by sharing what appears to be a rare and well preserved piece of previously unseen scientific history.
Great Tim !
However, there is a little bug, when you come back on the 1st page with a drag, the screen becomes white.
Can you explain how to detect clicks on the menu buttons ?
Edited: 20 Oct 2013, 3:25 a.m.
I added code : when you keep ENTER key pressed down on an element, informations about it are displayed. I also added ESC key.
symbol:={"H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu",
"Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr","Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba",
"La","Ce","Pr","Nd","Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Tl","Pb","Bi",
"Po","At","Rn","Fr","Ra","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm","Md","No","Lr","Rf","Db","Sg","Bh","Hs","Mt","Ds","Rg","Cn"};
l2:={"Hydrogène","Hélium","Lithium","Béryllium","Bore","Carbone","Azote","Oxygène","Fluor","Néon","Sodium","Magnésium","Aluminium","Silicium","Phosphore","Soufre","Chlore","Argon","Potassium","Calcium","Scandium","Titane","Vanadium","Chrome","Manganèse","Fer","Cobalt","Nickel","Cuivre","Zinc","Gallium","Germanium","Arsenic","Sélénium","Brome","Krypton","Rubidium","Strontium","Yttrium","Zirconium","Niobium","Molybdène","Technétium","Ruthénium","Rhodium","Palladium","Argent","Cadmium","Indium","Etain","Antimoine","Tellure","Iode","Xénon","Césium","Baryum","Lanthane","Cérium","Praséodyme","Néodyme","Prométhium","Samarium","Europium","Gadolinium","Terbium","Dysprosium","Holmium","Erbium","Thulium","Ytterbium","Lutétium","Hafnium","Tantale","Tungstène","Rhénium","Osmium","Iridium","Platine","Or","Mercure","Thallium","Plomb","Bismuth","Polonium","Astate","Radon","Francium","Radium","Actinium","Thorium","Protactinium","Uranium","Neptunium","Plutonium","Américium","Curium","Berkélium","Californium","Einsteinium","Fermium","Mendélévium","Nobélium","Lawrencium","Rutherfordium","Dubnium","Seaborgium","Bohrium","Hassium","Meitnerium","Darmstadtium","Roentgenium","Copernicium"};
//masse molaire
l3:={1,4,6.9,9,10.8,12,14,16,19,20.2,23,24.3,27,28.1,31,32.1,35.5,39.9,39.1,40.1,45.0,47.9,50.9,52.0,54.9,55.8,58.9,58.7,63.5,65.4,69.7,72.6,74.9,79,79.9,83.8,85.5,87.6,88.9,91.2,92.9,95.9,98.9,101.1,102.9,106.4,107.9,112.4,114.8,118.7,121.8,127.6,126.9,131.3,132.9,137.3,138.9,140.1,140.9,144.2,145,150.4,152,157.3,158.9,162.5,164.9,167.3,168.9,173,175,178.5,180.9,183.9,186.2,190.2,192.2,195.1,197,200.6,204.4,207.2,209,209,210,222,223,226,227,232,231,238,237,244,243,247,247,251,252,257,258,259,260,261,262,263,262,265,266,269,280,285};
//densité
l4:={0.0000899,0.0001785,0.535,1.848,2.46,2.26,0.001251,0.001429,0.001696,0.0009,0.968,1.738,2.7,2.33,1.823,1.96,0.003214,0.001784,0.856,1.55,2.985,4.507,6.11,7.14,7.47,7.874,8.9,8.908,8.92,7.14,5.904,5.323,5.727,4.819,3.12,0.00375,1.532,2.63,4.472,6.511,8.57,10.28,11.5,12.37,12.45,12.023,10.49,8.65,7.31,7.31,6.697,6.24,4.94,0.0059,1.879,3.51,6.146,6.689,6.64,7.01,7.264,7.353,5.244,7.901,8.219,8.551,8.795,9.066,9.321,6.57,9.841,13.31,16.65,19.25,21.02,22.59,22.56,21.09,19.3,13.534,11.85,11.34,9.78,9.196,0,0.00973,0,5,10.07,11.724,15.37,19.05,20.45,19.816,0,13.51,14.78,15.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//rayon
l5:={53,31,167,112,87,67,56,48,42,38,190,145,118,111,98,88,79,71,243,194,184,176,171,166,161,156,152,149,145,142,136,125,114,103,94,88,265,219,212,206,198,190,183,178,173,169,165,161,156,145,133,123,115,108,298,253,195,158,247,206,205,238,231,233,225,228,226,226,222,222,217,208,200,193,188,185,180,177,174,171,156,154,143,135,127,120,0,215,195,180,180,175,175,175,175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//électronégativité
l6:={2.2,0,0.98,1.57,2.04,2.55,3.04,3.44,3.9,0,0.93,1.31,1.61,1.9,2.19,2.58,3.16,0,0.82,1,1.36,1.54,1.63,1.66,1.55,1.83,1.88,1.91,1.9,1.65,1.81,2.01,2.18,2.55,2.96,0,0.82,0.95,1.22,1.33,1.6,2.16,2.1,2.2,2.28,2.2,1.93,1.69,1.78,1.96,2.05,2.1,2.66,0,0.79,0.89,1.1,1.12,1.13,1.14,0,1.17,0,1.2,0,1.22,1.23,1.24,1.25,0,1,1.3,1.5,1.7,1.9,2.2,2.2,2.2,2.4,1.9,1.8,1.8,1.9,2,2.2,0,0.7,0.9,1.1,1.3,1.5,1.7,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,0,0,0,0,0,0,0,0,0,0};
//fusion
l7:={−259,0,181,1278,2300,3370,−210,−218,−220,−249,98,649,660,1410,44,119,−101,−189,64,840,1539,1660,1890,1860,1224,1535,1495,1453,1083,420,30,937,0,217,−7,−157,39,769,1520,1852,2470,2617,2172,2310,1966,1552,962,321,157,232,631,450,114,−112,28,725,920,798,931,1010,1168,1070,822,1211,1360,1412,1474,1522,1500,824,1656,2230,2996,3410,3180,3050,2410,1772,1067,−39,304,328,271,254,302,−71,27,700,1050,1750,1600,1132,640,641,994,1340,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//ébullition
l8:={−253,−269,1347,2970,2550,4827,−196,−183,−188,−246,883,1090,2467,2355,280,445,−35,−186,774,1484,2832,3287,3380,2672,1962,2750,2870,2732,2567,907,2403,2830,613,685,59,−152,688,1384,3337,4377,4742,4612,4877,3900,3700,3140,2212,765,2080,2260,1750,990,184,−107,678,1640,3454,3257,3212,3127,2460,1778,1597,3233,3041,2562,2695,2510,1727,1193,3315,4602,5400,5660,5627,5030,4130,3800,2807,357,1460,1740,1560,962,337,−62,677,1140,3200,4790,0,3818,3902,3232,2607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//découverte
l9:={1766,1895,1817,1798,1808,0,1772,1774,1886,1898,1807,1755,1827,1824,1669,0,1774,1894,1807,1808,1878,1791,1801,1797,1774,0,1735,1751,0,0,1875,1886,0,1817,1826,1898,1861,1808,1794,1789,1801,1782,1937,1844,1803,1803,0,1817,1863,0,0,1782,1811,1898,1860,1808,1839,1803,1885,1885,1945,1879,1901,1880,1843,1886,1878,1842,1879,1878,1907,1923,1802,1783,1925,1803,1803,1735,0,0,1861,0,0,1898,1940,1900,1939,1898,1899,1828,1913,1789,1940,1940,1944,1944,1949,1950,1952,1952,1955,1958,1961,1964,1967,1974,1981,1984,1982,1994,1994,1996};l0:={1,16,3,10,8,10,72,27,14,4,14,0};
//color
m1:={#00EE00,#66AAFF,#FFAA00,#F3F300,#FFC1DC,#00DDBB,#FF93C2,#99BBAA,#B2AAFF,#B2F0FF};
m2:={1,2,3,4,7,1,1,1,8,2,3,4,6,7,1,1,8,2,3,4,5,5,5,5,5,5,5,5,5,5,6,7
,7,1,8,2,3,4,5,5,5,5,5,5,5,5,5,5,6,6,7,7,8,2,3,4,9,9,9,9,9,9,9,9,9,9
,9,9,9,9,9,5,5,5,5,5,5,5,5,5,6,6,6,7,8,2,3,4,10,10,10,10,10,10,10,10
,10,10,10,10,10,10,10,5,5,5,5,5,5,5,5,5};
//position
position:= [
[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 ],
3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10,
11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
87, 88, 89,104,105,106,107,108,109,110,111,112, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 0,
0, 0, 0, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103, 0
];
startX:=2,startY:=2,width:=22,height:=21;
offset:=0; //offest for graphical shift
selEl:=1; //selected element
DrawTable()
begin
DIMGROB_P(G1,320,220); RECT(G1);
local x:=startX-offset,y:=startY,i,j;
local tablePos=1;
for j:=1 to 10 do
for i:=1 to 18 do
if tablePos:=position(j,i) then
RECT_P(G1,x,y,x+width,y+height,RGB(0,0,0),m1(m2(tablePos)));
if selEl== tablePos then
RECT_P(G1,x+1,y+1,x+width-1,y+height-1,RGB(0,0,0),RGB(0,0,0,255));
end;
TEXTOUT_P(tablePos,G1,x+2,y+1,1);
TEXTOUT_P(symbol(tablePos),G1,x+8,y+10,1);
end;
x:=x+width;
end;
x:=x-18*width;
y:=y+height;
end;
x:=2*width-offset+width/4+startX; y:=7*height+startY;
LINE_P(G1,x,y,x,y+2*height+height/2);
LINE_P(G1,x,y+2*height+height/2,x+width*3/4,y+2*height+height/2);
x:=x+width/2;
LINE_P(G1,x,y,x,y+height+height/2);
LINE_P(G1,x,y+height+height/2,x+width/4,y+height+height/2);
blit_p(G0,G1);
end;
FindEl(x,y)
begin
local el,tempX:=(x-startX+offset)/width,tempY:=(y-startY)/height;
position(ip(tempY)+1,ip(tempX)+1)▶B;
return B;
end;
EXPORT elements()
BEGIN
DrawTable();
DRAWMENU({"","Fiche","Aide","Quitter"});
local touch;
WHILE 1 DO
blit_p(G0,G1,0,0);
touch:=mouse();if ISKEYDOWN(4) THEN BREAK; END;
if ISKEYDOWN(30) THEN
RECT_P(G0);
TEXTOUT_P(symbol(B),G0,180,2,3,RGB(255,105,0));
TEXTOUT_P(l2[B],G0,7,2,3,RGB(255,0,110));
TEXTOUT_P(B,G0,210,2,3,RGB(38,127,0));
IF (B==43 OR B==61 OR (93≤B AND B≤112)) THEN TEXTOUT_P("Elément de synthèse",G0,10,22,1); ELSE IF l8[B]<26 AND l8[B] THEN TEXTOUT_P("Etat gazeux à 25°C",G0,10,22,1); END;
IF (l7[B]<26 AND l7[B] AND l8[B]>25) THEN TEXTOUT_P("Etat liquide à 25°",G0,10,22,1); END;
IF l7[B]>26 OR B==33 THEN TEXTOUT_P("Etat solide à 25°C",G0,10,22,1); END;
TEXTOUT_P("Masse molaire: ",G0,10,34,1,RGB(0,124,240));
TEXTOUT_P(l3[B]+" g.mol",G0,105,34,1);
TEXTOUT_P("Densité: ",G0,10,46,1,RGB(0,124,240));
TEXTOUT_P(IFTE(l4[B],l4[B],"inconnu"),G0,105,46,1);
TEXTOUT_P("Rayon atomique:",G0,10,58,1,RGB(0,124,240));
TEXTOUT_P(IFTE(l5[B],l5[B]+" pm","inconnu"),G0,105,58,1);
TEXTOUT_P("Electronégativité: ",G0,10,70,1,RGB(0,124,240));
TEXTOUT_P(IFTE(l6[B],l6[B],"inexistante ou inconnue"),G0,105,70,1);
TEXTOUT_P("Point de fusion:",G0,10,82,1,RGB(0,124,240));
TEXTOUT_P(IFTE(l7[B],l7[B]+"°C","inexistant ou inconnu"),G0,105,82,1);
TEXTOUT_P("Point d'ébullition:",G0,10,94,1,RGB(0,124,240));
TEXTOUT_P(IFTE(l8[B],l8[B]+"°C","inconnu"),G0,105,94,1);
TEXTOUT_P("Découverte:",G0,10,106,1,RGB(0,124,240));
TEXTOUT_P(IFTE(l9[B],l9[B],"antique"),G0,105,106,1);
TEXTOUT_P("҉ Elements ҉ HP Prime",G0,200,215,1,RGB(255,0,110));
TEXTOUT_P("Par Marc Coudriau, Mickaël Nicotera & Tim Wessman",G0,70,228,1,RGB(65,65,65));
elements()
END;
END;
if size(touch(1)) then //something in our mouse
case
if touch(1,5)==0 then //touch
local el:= FindEl(touch(1,1),touch(1,2));
if el then
selEl:=el;
DrawTable();
end;
end;
if touch(1,5)==1 then "incomplete" end;
if touch(1,5)==2 then //drag
offset:=touch(1,3)-touch(1,1);
DrawTable();
end;
if touch(1,5)==3 then return "stretch"; end;
if touch(1,5)==4 then return "rotate"; end;
if touch(1,5)==5 then return "long click"; end;
end;
end;
END;
END;
Edited: 20 Oct 2013, 3:26 a.m.
The sequence − should be replaced by a minus sign.
Edit: Answer to wrong post within thread, but anyway...
There are a few more Unicode characters mangled by the forum software:
≤ is <=
 is a Prime special character (which I cant identify in the moment)
҉ is a Cyrillic character (just a decoration in this case).
I've had some trouble geting the program to run on the emulator. Clicking in the image still produces some errors.
Edited: 20 Oct 2013, 9:38 a.m.
Quote:
 is a Prime special character (which I cant identify in the moment)
It's the ^-1 character, obtained by pressing Shift divide, or CHAR(57348).