commit 94f8f4bb46185cc528f97eefb6c25569f197c3ce Author: flo Date: Mon Apr 10 17:50:10 2017 +0200 Periodiq diff --git a/Makefile b/Makefile new file mode 100755 index 0000000..ab436ce --- /dev/null +++ b/Makefile @@ -0,0 +1,70 @@ +#!/usr/bin/make -f +# INCLUDE CONFIGURATION +include $(CURDIR)/Makefile.config + +# DEDUCED VARS +ALLOBJ = $(patsubst %,$(OBJDIR)/%.o,$(SRC)) +ALLINC = $(INC:%=$(INCDIR)/%) + +# RULES +## Make it all (default rule) +all: $(NAME).g1a + +## Make the object directory +$(OBJDIR): + mkdir -p $(OBJDIR) + +## Compile sprites +$(OBJDIR)/%.bmp.o: $(IMGDIR)/%.bmp + fxconv $< -o $@ -n $(patsubst %.bmp,img_%,$(notdir $<)) + +## Compile fonts +$(OBJDIR)/%.bmp.o: $(FONTDIR)/%.bmp + fxconv $< -o $@ -n $(patsubst %.bmp,font_%,$(notdir $<)) + +## Make an object file out of an ASM source file +$(OBJDIR)/%.s.o: $(SRCDIR)/%.s + $(AS) -c -o $@ $< + +## Make an object file out of a C source file +$(OBJDIR)/%.c.o: $(SRCDIR)/%.c $(ALLINC) + $(CC) -c -o $@ $< $(CFLAGS) + +## Make the ELF file +$(NAME).elf: $(OBJDIR) $(ALLOBJ) + $(LD) -o $@ $(ALLOBJ) $(LFLAGS) + +## Make the BIN file +$(NAME).bin: $(NAME).elf + $(OBJCPY) -R .comment -R .bss -R '$$iop' -O binary $< $@ + +## Make the G1A file +$(NAME).g1a: $(NAME).bin + $(WRAPR) $< -o $(NAME).g1a -i $(ICON) + @stat -c "Build finished -- output size is %s bytes." $(NAME).g1a + +## Clean up your mess +clean: + $(RM) $(OBJDIR) + $(RM) $(NAME).elf + $(RM) $(NAME).bin + +## Clean up everything +fclean: clean + $(RM) $(NAME).g1a + $(RM) $(NAME).txt + +dump: + $(OBJDUMP) -d $(NAME).elf > $(NAME).txt + @stat -c "Dump file -- dump file put in %n ." $(NAME).txt + +## Remake +re: fclean all + +## Send to calc +send: + $(SENDR) send $(NAME).g1a -f + +## Phuneral phuture ? +.PHONY: all clean fclean dump re send +# END OF FILE diff --git a/Makefile.config b/Makefile.config new file mode 100755 index 0000000..9d50496 --- /dev/null +++ b/Makefile.config @@ -0,0 +1,50 @@ +#!/usr/bin/make -f +# PROJECT INFORMATION +NAME = periodiq +ICON = misc/icon.bmp +LIB = gcc + +## DIRECTORIES +SRCDIR = ./src +INCDIR = ./include +OBJDIR = ./obj +LIBDIR = ./lib +SCPTDIR = ./scripts +IMGDIR = ./img +FONTDIR = ./font + +# TOOLCHAIN +## Directory maker +MD = mkdir -p +## File remover +RM = rm -f -r +## Assembler +AS = sh3eb-elf-as +## C compiler +CC = sh3eb-elf-gcc +CFLAGS = -m3 -mb -Os -nostdlib -Wall -Wextra -Wno-main -pedantic -std=c11 -I $(INCDIR) `fxsdk --cflags` +## Linker +LD = sh3eb-elf-gcc +LFLAGS = `fxsdk --cflags` `fxsdk --libs` +## Object copier +OBJCPY = sh3eb-elf-objcopy +## Object dump +OBJDUMP = sh3eb-elf-objdump +## G1A Wrapper +WRAPR = g1a-wrapper +## Sender +SENDR = p7 + +# SOURCES +SRC = $(notdir $(wildcard $(SRCDIR)/*.[cs])) + +# INCLUDES +INC = $(notdir $(wildcard $(INCDIR)/*.h)) + +# SPRITES +IMG = $(notdir $(wildcard $(IMGDIR)/*.bmp)) + +# FONTS +FONT = $(notdir $(wildcard $(FONTDIR)/*.bmp)) + +# END OF FILE diff --git a/font/modern.bmp b/font/modern.bmp new file mode 100644 index 0000000..e69de29 diff --git a/font/system.bmp b/font/system.bmp new file mode 100644 index 0000000..e69de29 diff --git a/img/Tableau.png b/img/Tableau.png new file mode 100644 index 0000000..13eae05 Binary files /dev/null and b/img/Tableau.png differ diff --git a/img/actane.png b/img/actane.png new file mode 100644 index 0000000..113d2b4 Binary files /dev/null and b/img/actane.png differ diff --git a/img/alkalin.png b/img/alkalin.png new file mode 100644 index 0000000..4d21ac2 Binary files /dev/null and b/img/alkalin.png differ diff --git a/img/alkalino.png b/img/alkalino.png new file mode 100644 index 0000000..06b1fbe Binary files /dev/null and b/img/alkalino.png differ diff --git a/img/detail.png b/img/detail.png new file mode 100644 index 0000000..03fc08f Binary files /dev/null and b/img/detail.png differ diff --git a/img/famille.png b/img/famille.png new file mode 100644 index 0000000..7345e80 Binary files /dev/null and b/img/famille.png differ diff --git a/img/find.png b/img/find.png new file mode 100644 index 0000000..dd2861b Binary files /dev/null and b/img/find.png differ diff --git a/img/fleche.png b/img/fleche.png new file mode 100644 index 0000000..c005124 Binary files /dev/null and b/img/fleche.png differ diff --git a/img/g rare.png b/img/g rare.png new file mode 100644 index 0000000..a41f100 Binary files /dev/null and b/img/g rare.png differ diff --git a/img/halogene.png b/img/halogene.png new file mode 100644 index 0000000..49440b0 Binary files /dev/null and b/img/halogene.png differ diff --git a/img/lanthan.png b/img/lanthan.png new file mode 100644 index 0000000..857e876 Binary files /dev/null and b/img/lanthan.png differ diff --git a/img/maxi.png b/img/maxi.png new file mode 100644 index 0000000..30c21d7 Binary files /dev/null and b/img/maxi.png differ diff --git a/img/metal-trans.png b/img/metal-trans.png new file mode 100644 index 0000000..f6c2447 Binary files /dev/null and b/img/metal-trans.png differ diff --git a/img/metalloide.png b/img/metalloide.png new file mode 100644 index 0000000..b18eb35 Binary files /dev/null and b/img/metalloide.png differ diff --git a/img/mini.png b/img/mini.png new file mode 100644 index 0000000..1fde499 Binary files /dev/null and b/img/mini.png differ diff --git a/img/n metal.png b/img/n metal.png new file mode 100644 index 0000000..b8f6c68 Binary files /dev/null and b/img/n metal.png differ diff --git a/img/post.png b/img/post.png new file mode 100644 index 0000000..7f1911f Binary files /dev/null and b/img/post.png differ diff --git a/img/select.jpg b/img/select.jpg new file mode 100644 index 0000000..2a0da0e Binary files /dev/null and b/img/select.jpg differ diff --git a/include/periodiq.h b/include/periodiq.h new file mode 100644 index 0000000..740f92f --- /dev/null +++ b/include/periodiq.h @@ -0,0 +1,45 @@ +#ifndef _PERIODIQ_H + #define _PERIODIQ_H + + + unsigned int key; + + struct Element + { + unsigned char nom[14]; // le nom + unsigned char symbol[4]; // le symbole + float masse_mol; // la masse molaire // que l'on divise par 1000 + unsigned char config_electro [18]; // la config électronique + unsigned int groupe : 3; //le groupe //x + unsigned int periode : 5; // la période // y + unsigned char valence; // le nombre de valence + float electro_neg; // electro negativité + unsigned char dessus; // element au dessus de celui actuel + unsigned char dessous; // element en dessous de celui actuel +}; + +//1 : 1 +//11 : 3 +//111 : 7 +//1111 : 15 +//11111 : 31 +//111111 : 63 +//1111111 : 127 +//11111111 : 255 + +struct Detail +{ + short annee ; + unsigned int famille : 4; + unsigned int etat : 4; +}; + +int detailsElement(int); //chang //a +int tableauElement(int); //chang +int tableauEleMini(int); //chang +int find(int); // int : pour le return +void choix_famille(int); +void Mini(char* c, int n); +void calcul_mole(void); + +#endif diff --git a/obj/periodiq.c.o b/obj/periodiq.c.o new file mode 100644 index 0000000..74a16bb Binary files /dev/null and b/obj/periodiq.c.o differ diff --git a/src/periodiq.c b/src/periodiq.c new file mode 100644 index 0000000..1f9654e --- /dev/null +++ b/src/periodiq.c @@ -0,0 +1,855 @@ +/*****************************************************************/ +/* */ +/* CASIO fx-9860G SDK Library */ +/* */ +/* File name : [ProjectName].c */ +/* */ +/* Copyright (c) 2006 CASIO COMPUTER CO., LTD. */ +/* */ +/*****************************************************************/ +#include "periodiq.h" + +#include "display.h" +#include "stdlib.h" +#include "stdio.h" +#include "ctype.h" +#include "keyboard.h" + + +//#include +//#include + +int atoi(const char *str) +{ + // Variables declaration. + int n=0, sign=1; + + // Parsing string until the first glyph. + while(isspace(*str)) str++; + + // Checking sign. + if(*str=='-') sign=-1, str++; + else if(*str=='+') sign=+1, str++; + + // Reading digits. + while(isdigit(*str)) + { + n += *str - '0'; + if(*++str) n *= 10; + } + + // Returning the final value. + return n*sign; +} + +//**************************************************************************** +// AddIn_main (Sample program main function) +// +// param : isAppli : 1 = This application is launched by MAIN MENU. +// : 0 = This application is launched by a strip in eACT application. +// +// OptionNum : Strip number (0~3) +// (This parameter is only used when isAppli parameter is 0.) +// +// retval : 1 = No error / 0 = Error +// +//**************************************************************************** + +struct Element elements[] = +{ + { /*1, */"Hydrogene","H",1.008,"1",1,1,1,2.20,0,2}, + { /*2, */"Helium","He",4.003,"2",18,1,0,0,1,9}, + { /*3, */"Lithium","Li",6.940,"2-1",1,2,1,0,0,10}, + { /*4, */"Beryllium","Be",9.012,"2-2",2,2,2,1.57,0,11}, + { /*5, */"Bore","B",10.810,"2-3",13,2,2,2.04,1,12}, + { /*6, */"Carbone","C",12.011,"2-4",14,2,3,2.55,1,13}, + { /*7, */"Azote","N",14.007,"2-5",15,2,4,3.04,1,14}, + { /*8, */"Oxygene","O",15.999,"2-6",16,2,5,3.44,1,15}, + { /*9, */"Fluor","F",18.998,"2-7",17,2,2,3.98,1,16}, + {/*10, */"Neon","Ne",20.178,"2-8",18,2,0,0,1,17}, + {/*11, */"Sodium","Na",22.990,"2-8-1",1,3,1,0.93,2,18}, + {/*12, */"Magnesium","Mg",24.305,"2-8-2",2,3,2,1.31,3,19}, + {/*13, */"Aluminium","Al",26.982,"2-8-3",13,3,3,1.61,4,30}, + {/*14, */"Silicium","Si",28.085,"2-8-4",14,3,4,1.90,5,31}, + {/*15, */"Phosphore","P",30.974,"2-8-5",15,3,5,2.19,6,32}, + {/*16, */"Soufre","S",32.060,"2-8-6",16,3,6,2.58,7,33}, + {/*17, */"Chlore","Cl",35.450,"2-8-7",17,3,7,3.16,8,34}, + {/*18, */"Argon","Ar",39.948,"2-8-8",18,3,2,0,9,35}, + {/*19, */"Potassium","K",39.098,"2-8-8-1",1,4,1,0.82,10,36}, + {/*20, */"Calcium","Ca",40.078,"2-8-8-2",2,4,2,1.0,11,37}, + {/*21, */"Scandium","Sc",44.956,"2-8-9-2",3,4,3,1.36,20,38}, + {/*22, */"Titane","Ti",47.867,"2-8-10-2",4,4,4,1.54,21,39}, + {/*23, */"Vanadium","Va",50.941,"2-8-11-2",5,4,5,1.63,22,40}, + {/*24, */"Chrome","Cr",51.996,"2-8-13-1",6,4,6,1.66,23,41}, + {/*25, */"Manganese","Mn",54.380,"2-8-13-2",7,4,7,1.55,24,42}, + {/*26, */"Fer","Fe",55.845,"2-8-14-2",8,4,6,1.83,25,43}, + {/*27, */"Cobalt","Co",58.933,"2-8-15-2",9,4,5,1.88,26,44}, + {/*28, */"Nickel","Ni",58.693,"2-8-16-2",10,4,4,1.91,27,45}, + {/*29, */"Cuivre","Cu",63.546,"2-8-18-1",11,4,4,1.90,28,46}, + {/*30, */"Zinc","Zn",65.380,"2-8-18-2",12,4,2,1.65,29,47}, + {/*31, */"Gallium","Ga",69.723,"2-8-18-3",13,4,3,1.81,12,48}, + {/*32, */"Germanium","Gr",72.630,"2-8-18-4",14,4,4,2.01,13,49}, + {/*33, */"Arsenic","As",74.921,"2-8-18-5",15,4,5,2.18,14,50}, + {/*34, */"Selenium","Se",78.971,"2-8-18-6",16,4,6,2.55,15,51}, + {/*35, */"Brome","Br",79.904,"2-8-18-7",17,4,7,2.96,16,52}, + {/*36, */"Krypton","Kr",83.798,"2-8-18-8",18,4,2,3.00,17,53}, + {/*37, */"Rubidium","Rb",85.468,"2-8-18-8-1",1,5,1,0.82,18,54}, + {/*38, */"Strontium","Sr",87.620,"2-8-18-8-2",2,5,2,0.95,19,55}, + {/*39, */"Yttrium","Y",88.906,"2-8-18-9-2",3,5,3,1.22,20,56}, + {/*40, */"Zirconium","Zr",91.224,"2-8-18-10-2",4,5,4,1.33,21,71}, + {/*41, */"Niobium","Nb",92.906,"2-8-18-12-1",5,5,5,1.6,22,72}, + {/*42, */"Molybdene","Mo",95.950,"2-8-18-13-1",6,5,6,2.16,23,73}, + {/*43, */"Technetium","Tc",98.000,"2-8-18-13-2",7,5,7,1.9,24,74}, + {/*44, */"Ruthenium","Ru",101.070,"2-8-18-15-1",8,5,8,2.2,25,75}, + {/*45, */"Rhodium","Rh",102.906,"2-8-18-16-1",9,5,6,2.28,26,76}, + {/*46, */"Palladium","Pd",106.420,"2-8-18-18",10,5,4,2.20,27,77}, + {/*47, */"Argent","Ag",107.869,"2-8-18-18-1",11,5,4,1.93,28,78}, + {/*48, */"Cadmium","Cd",112.414,"2-8-18-18-2",12,5,2,1.69,29,79}, + {/*49, */"Indium","In",114.818,"2-8-18-18-3",13,5,3,1.78,30,80}, + {/*50, */"Etain","Sn",118.710,"2-8-18-18-4",14,5,4,1.96,31,81}, + {/*51, */"Antimoine","Sb",121.760,"2-8-18-18-5",15,5,5,2.05,32,82}, + {/*52, */"Tellure","Te",127.600,"2-8-18-18-6",16,5,6,2.55,33,83}, + {/*53, */"Iode","I",126.904,"2-8-18-18-7",17,5,7,2.66,34,84}, + {/*54, */"Xenon","Xe",130.293,"2-8-18-18-8",18,5,8,2.6,35,85}, + {/*55, */"Cesium","Cs",132.905,"2-8-18-18-8-1",1,6,1,0.79,36,86}, + {/*56, */"Baryum","Ba",137.327,"2-8-18-18-8-2",2,6,2,0.89,37,87}, + {/*57, */"Lanthane","La",138.910,"2-8-18-18-9-2",4,6,3,1.10,103,88}, // lanthanides + {/*58, */"Cerium","Ce",140.116,"2-8-18-19-9-2",5,6,4,1.12,104,89}, + {/*59, */"Praseodyme","Pr",140.907,"2-8-18-21-8-2",6,6,4,1.13,105,90}, + {/*60, */"Neodyme","Nd",144.242,"2-8-18-22-8-2",7,6,3,1.14,106,91}, + {/*61, */"Promethium","Pm",145.000,"2-8-18-23-8-2",8,6,3,0,107,92}, + {/*62, */"Samarium","Sm",150.360,"2-8-18-24-8-2",9,6,3,1.17,108,93}, + {/*63, */"Europium","Eu",151.964,"2-8-18-25-8-2",10,6,3,0,109,94}, + {/*64, */"Gadolinium","Gd",157.250,"2-8-18-25-9-2",11,6,3,1.20,110,95}, + {/*65, */"Terbium","Tb",158.925,"2-8-18-27-8-2",12,6,4,0,111,96}, + {/*66, */"Dysprosium","Dy",162.500,"2-8-18-28-8-2",13,6,3,1.22,112,97}, + {/*67, */"Holmium","Ho",164.930,"2-8-18-29-8-2",14,6,3,1.23,113,98}, + {/*68, */"Erbium","Er",167.259,"2-8-18-30-8-2",15,6,3,1.24,114,99}, + {/*69, */"Thulium","Tm",168.934,"2-8-18-31-8-2",16,6,3,1.25,115,100}, + {/*70, */"Yttrebium","Yb",173.054,"2-8-18-32-8-2",17,6,3,0,116,101}, + {/*71, */"Lutecium","Lu",174.967,"2-8-18-32-9-2",18,6,3,1.27,117,102},//fin des lanthanides + {/*72, */"Hafnium","Hf",178.490,"2-8-18-32-10-2",4,6,4,1.3,39,103}, + {/*73, */"Tantale","Ta",180.948,"2-8-18-32-11-2",5,6,5,1.5,40,104}, + {/*74, */"Tungstene","W",183.840,"2-8-18-32-12-2",6,6,6,2.36,41,105}, + {/*75, */"Rhenium","Re",186.207,"2-8-18-32-13-2",7,6,7,1.9,42,106}, + {/*76, */"Osmium","Os",190.230,"2-8-18-32-14-2",8,6,8,2.2,43,107}, + {/*77, */"Iridium","Ir",192.217,"2-8-18-32-15-2",9,6,8,2.20,44,108}, + {/*78, */"Platine","Pt",195.084,"2-8-18-32-17-1",10,6,6,2.28,45,109}, + {/*79, */"Or","Au",196.967,"2-8-18-32-18-1",11,6,5,2.54,46,110}, + {/*80, */"Mercure","Hg",200.590,"2-8-18-32-18-2",12,6,4,2.0,47,111}, + {/*81, */"Thallium","Tl",204.380,"2-8-18-32-18-3",13,6,3,1.62,48,112}, + {/*82, */"Plomb","Pb",207.200,"2-8-18-32-18-4",14,6,4,2.33,49,113}, + {/*83, */"Bismuth","Bi",208.980,"2-8-18-32-18-5",15,6,5,2.02,50,114}, + {/*84, */"Polonium","Po",209.000,"2-8-18-32-18-6",16,6,6,2.0,51,115}, + {/*85, */"Astate","At",210.000,"2-8-18-32-18-7",17,6,7,2.2,52,116}, + {/*86, */"Radon","Rn",212.000,"2-8-18-32-18-8",18,6,6,0,53,117}, + {/*87, */"Francium","Fr",223.000,"2-8-18-32-18-8-1",1,7,1,0.7,54,86}, + {/*88, */"Radium","Ra",226.000,"2-8-18-32-18-8-2",2,7,2,0.9,55,87}, + {/*89, */"Actinium","Ac",227.000,"2-8-18-32-18-9-2",4,7,3,1.1,56,88}, // actinide + {/*90, */"Thorium","Th",232.038,"2-8-18-32-18-10-2",5,7,4,1.3,57,89}, + {/*91, */"Protactinium","Pa",231.036,"2-8-18-32-20-9-2",6,7,5,1.5,58,90}, + {/*92, */"Uranium","U",238.029,"2-8-18-32-21-9-2",7,7,6,1.38,59,91}, + {/*93, */"Neptunium","Np",237.000,"2-8-18-32-22-9-2",8,7,7,1.36,60,92}, + {/*94, */"Plutonium","Pu",244.000,"2-8-18-32-24-8-2",9,7,8,1.28,61,93}, + {/*95, */"Americum","Am",243.000,"2-8-18-32-25-8-2",10,7,6,1.3,62,94}, + {/*96, */"Curium","Cm",247.000,"2-8-18-32-25-9-2",11,7,4,1.3,63,95}, + {/*97, */"Berkelium","Bk",247.000,"2-8-18-32-27-8-2",12,7,4,1.3,64,96}, + {/*98, */"Californium","Cf",251.000,"2-8-18-32-28-8-2",13,7,4,1.3,65,97}, + {/*99, */"Einsteinium","Es",252.000,"2-8-18-32-29-8-2",14,7,3,1.3,66,98}, + {/*100,*/"Fermium","Fm",257.000,"2-8-18-32-30-8-2",15,7,3,1.3,67,99}, + {/*101,*/"Mendelevium","Md",258.000,"2-8-18-32-31-8-2",16,7,3,1.3,68,100}, + {/*102,*/"Nobelium","No",259.000,"2-8-18-32-32-8-2",17,7,3,1.3,69,101}, + {/*103,*/"Lawrencium","Lr",262.000,"2-8-18-32-32-8-3",18,7,3,0,70,102},// fin des actinides + {/*104,*/"Rutherfordium","Rf",267.000,"2-8-18-32-32-10-2",4,7,4,0,71,56}, + {/*105,*/"Dubnium","Db",268.000,"2-8-18-32-32-11-2",5,7,5,0,72,57}, + {/*106,*/"Seaborg","Sg",271.000,"2-8-18-32-32-12-2",6,7,6,0,73,58}, + {/*107,*/"Bohrium","Bh",272.000,"2-8-18-32-32-13-2",7,7,7,0,74,59}, + {/*108,*/"Hassium","Hs",270.000,"2-8-18-32-32-14-2",8,7,8,0,75,60}, + {/*109,*/"Meitnerium","Mt",276.000,"2-8-18-32-32-15-2",9,7,-1,0,76,61}, // -1 corespond à "inconnu" + {/*110,*/"Darmstadium","Ds",281.000,"2-8-18-32-32-17-1",10,7,-1,0,77,62}, + {/*111,*/"Roengenium","Rg",280.000,"2-8-18-32-32-18-1",11,7,-1,0,78,63}, + {/*112,*/"Copernicium","Cn",285.000,"2-8-18-32-32-18-2",12,7,-1,0,79,64}, + {/*113,*/"Ununtrium","Uut",284.000,"2-8-18-32-32-18-3",13,7,-1,0,80,65}, + {/*114,*/"Flerovium","Fl",289.000,"2-8-18-32-32-18-4",14,7,-1,0,81,66}, + {/*115,*/"Ununpentium","Uup",288.000,"2-8-18-32-32-18-5",15,7,-1,0,82,67}, + {/*116,*/"Livermorium","Lv",288.000,"2-8-18-32-32-18-6",16,7,-1,0,83,68}, + {/*117,*/"Ununseptium","Uus",294.000,"2-8-18-32-32-18-7",17,7,-1,0,84,69}, + {/*118,*/"Ununoctium","Uun",294.000,"2-8-18-32-32-18-8",18,7,-1,0,85,70} +}; + +struct Detail ajout[] = { +{1766,0,1}, +{1895,2,1}, +{1817,4,0}, +{1797,5,0}, +{1808,3,0}, +{-3750,0,0}, +{1772,0,1}, +{1774,0,1}, +{1886,1,1}, +{1898,2,1},//10 +{1807,4,0}, +{1755,5,0}, +{1825,9,0}, +{1824,3,0}, +{1669,0,0}, +{-500,0,0}, +{1774,1,1}, +{1894,2,1}, +{1807,4,0}, +{1808,5,0},//20 +{1879,8,0}, +{1791,8,0}, +{1801,8,0}, +{1797,8,0}, +{1774,8,0}, +{-2000,8,0}, +{1735,8,0}, +{1751,8,0}, +{-8000,8,0}, +{1500,8,0},//30 +{1875,9,0}, +{1886,3,0}, +{1250,3,0}, +{1817,0,0}, +{1826,1,2}, +{1898,2,1}, +{1861,4,0}, +{1790,5,0}, +{1794,8,0}, +{1789,8,0},//40 +{1801,8,0}, +{1781,8,0}, +{1937,8,0}, +{1844,8,0}, +{1803,8,0}, +{1803,8,0}, +{-3000,8,0}, +{1817,8,0}, +{1863,9,0}, +{-3000,9,0},//50 +{-3000,3,0}, +{1783,3,0}, +{1811,1,0}, +{1898,2,1}, +{1860,4,0}, +{1808,5,0}, +{1839,6,0}, +{1803,6,0}, +{1885,6,0}, +{1885,6,0},//60 +{1945,6,0}, +{1879,6,0}, +{1901,6,0}, +{1880,6,0}, +{1843,6,0}, +{1886,6,0}, +{1878,6,0}, +{1842,6,0}, +{1879,6,0}, +{1878,6,0},//70 +{1907,6,0}, +{1923,8,0}, +{1802,8,0}, +{1783,8,0}, +{1925,8,0}, +{1803,8,0}, +{1803,8,0}, +{1735,8,0}, +{-2500,8,0}, +{-1500,8,2},//80 +{1861,9,0}, +{-4000,9,0}, +{1400,9,0}, +{1898,3,0}, +{1940,1,0}, +{1900,2,1}, +{1939,4,0}, +{1898,5,0}, +{1899,7,0}, +{1829,7,0},//90 +{1913,7,0}, +{1789,7,0}, +{1940,7,0}, +{1940,7,0}, +{1944,7,0}, +{1944,7,0}, +{1949,7,0}, +{1950,7,0}, +{1952,7,0}, +{1950,7,0},//100 +{1955,7,0}, +{1958,7,0}, +{1961,7,0}, +{1964,8,3}, +{1967,8,3}, +{1974,8,3}, +{1981,8,3}, +{1984,8,3}, +{1982,8,3}, +{1994,8,3},//110 +{1994,8,3}, +{1996,8,3}, +{2004,9,3}, +{1998,9,3}, +{2004,9,3}, +{2000,9,3}, +{2010,1,3}, +{2006,2,3} +}; + +char *family[25] ={ +{"non metaux"},//0 +{"halogene"},//1 +{"gaz rare"},//2 +{"metalloide"},//3 +{"metal alcalin"},//4 +{"metal alcalino terreux"},//5 +{"lanthanide"},//6 +{"actinide"},//7 +{"metal de transition"},//8 +{"post transition metal"}//9 +}; + +char *etat[9]={ + {"solide"},//0 + {"gaz"},//1 + {"liquide"},//2 + {"inconnu"},//3 +}; + +extern Font font_modern; + +//text_configure(font_modern, color_black); + +int main() +{ +tableauElement(0); + return 1; +} + + +void Mini(char* chaine, int n ) // fonc defini le numero de la fonction +{ + + short j; + + drect(n*21+2, 56, n*21+20, 63, color_black); + + dtext(n*21+strlen(chaine), 58, chaine); + //ML_display_vram(); +} + +int tableauElement(int chang) +{ + + short decalx=0,decaly=0; + short x,y; + short i; + + + + while(1) + { + dclear(); + + chang=(chang>=118 ? 0 : chang<=-1 ? 117 : chang); + + decalx=-(((12*elements[chang].groupe)-13)*108)/240; // on fait un decalage lorsque l'on bouge + decaly=(elements[chang].periode==5 ? -7 : elements[chang].periode>5 ? -14 : 0); + + for(i=0;i<118;i++) + { + x=elements[i].groupe; + y=(i>55 && i<71 ? 9 : i>87 && i<103 ? 10 : elements[i].periode); + + + dtext(12*x+decalx-12,7*y+decaly-6,elements[i].symbol); + + dtext(12*3-11+decalx,7*6-7+decaly,"1"); + dtext(12*3-11+decalx,7*7-7+decaly,"2"); + + dtext(12*3-11+decalx,7*9+decaly-5,"1"); + dtext(12*3-11+decalx,7*10+decaly-5,"2"); + } + + if (chang>55 && chang<71) + { + drect(12*elements[chang].groupe-13+decalx,7*9-7+decaly,12*elements[chang].groupe-1+decalx,7*9+decaly,color_black); + } + else if (chang>87 && chang<103) + { + drect(12*elements[chang].groupe-13+decalx,7*10-7+decaly,12*elements[chang].groupe-1+decalx,7*10+decaly,color_black); + } + else + { + drect(12*elements[chang].groupe-13+decalx,7*elements[chang].periode-7+decaly,12*elements[chang].groupe+decalx,7*elements[chang].periode+decaly,color_black); + } + + drect(0,56,128,64,color_white); // on fait un rectangle blanc pour qu'il n'y ait rien + + Mini("mini",0); + Mini("find",1); + Mini("mol",2); + + Mini("det",5); + + key=getkey(); + + switch(key) + { + case KEY_LEFT : chang+=1; break; + case KEY_RIGHT : chang-=1; break; + case KEY_DOWN : chang=elements[chang].dessous; break; + case KEY_UP : chang=elements[chang].dessus; break; + + case KEY_F4 : chang=tableauEleMini(chang); break; + case KEY_F2 : chang=find(chang); break; + case KEY_F3 : calcul_mole(); break; + + case KEY_F6 : case KEY_EXE : chang=detailsElement(chang); break; + + case KEY_EXIT : return; + } + } +} + +int tableauEleMini(int chang) +{ +char buffer[50]; +char y; +char menu=0; +char choix=-1; + +while(1) + { + dclear(); + +// ML_bmp_or(TABLEAU_MINI,0,0,91,48); + choix_famille(choix); // on met en place le choix sur les familles + + chang=(chang>=118 ? 0 : chang<=-1 ? 117 : chang); + + y=(chang>55 && chang<71 ? 9 : chang>87 && chang<103 ? 10 : elements[chang].periode); + + if (chang>55 && chang<71 || chang>87 && chang<103) + { + drect(5*elements[chang].groupe-4,5*y-7,5*elements[chang].groupe-1,5*y-4,color_black); + } + else + { + drect(5*elements[chang].groupe-4,5*y-4,5*elements[chang].groupe-1,5*y-1,color_black); + } + + + dtext(110-3*strlen(elements[chang].symbol),13,elements[chang].symbol); + + sprintf(buffer,"%d",chang+1); // détail des éléments sur la droite + dtext(110-2*strlen(buffer),5,buffer); + + sprintf(buffer,"%.3f",elements[chang].masse_mol); + dtext(110-2*strlen(buffer),23,buffer); + + + + if(menu==0) + { + + Mini("maxi",0); + Mini("find",1); + Mini("mol",2); + + Mini("fami",4); + Mini("det",5); + + key=getkey(); + + switch(key) + { + case KEY_F1 : case KEY_EXIT : return chang; + case KEY_F2 : chang=find(chang); break; + case KEY_F3 : calcul_mole(); break; + + case KEY_F5 : menu=1; break; + case KEY_F6 : chang=detailsElement(chang); break; + } + } + else if (menu==1) + { + Mini("n-me",0); + Mini("halo",1); + Mini("g-ra",2); + Mini("m-ti",3); + Mini("m-al",4); + Mini(" -->",5); + + key=getkey(); + + switch(key) + { + case KEY_EXIT : menu=0; choix=-1; break; + + case KEY_F1 : choix=0; break; + case KEY_F2 : choix=1; break; + case KEY_F3 : choix=2; break; + case KEY_F4 : choix=3; break; + case KEY_F5 : choix=4; break; + case KEY_F6 : menu=2; break; // on change dans les 2 menus + } + } + else if (menu==2) + { + Mini("m-at",0); + Mini("lant",1); + Mini("acta",2); + Mini("m-tr",3); + Mini("p-tr",4); + Mini(" -->",5); + + key=getkey(); + + switch(key) + { + case KEY_EXIT : menu=0; choix=-1;break; + + case KEY_F1 : choix=5; break; + case KEY_F2 : choix=6; break; + case KEY_F3 : choix=7; break; + case KEY_F4 : choix=8; break; + case KEY_F5 : choix=9; break; + case KEY_F6 : menu=1; break; // on change dans les 2 menus + + } + } + + switch(key) // pour les touches principales à chaque fois + { + case KEY_LEFT : chang+=1; break; + case KEY_RIGHT : chang-=1; break; + case KEY_DOWN : chang=elements[chang].dessous; break; + case KEY_UP : chang=elements[chang].dessus; break; + + case KEY_EXE : chang=detailsElement(chang); break; + + } + } +} + +void choix_famille(int choix) + { + /* +char i=0,y; + + for(i;i<118;++i) + { + if (choix==ajout[i].famille) + { + y=(i>55 && i<71 ? 9 : i>87 && i<103 ? 10 : elements[i].periode); + + (i>55 && i<71 || i>87 && i<103 ? ML_bmp_or(select,5*elements[i].groupe-4,5*y-7,4,4) : ML_bmp_or(select,5*elements[i].groupe-4,5*y-4,4,4)); + + ML_bmp_or(select,20,50,4,4); + dtext(30,50,family[choix]); + } + }*/ +} + +int detailsElement(int a) +{ + const char buffer[50]; + char descente=-9; + +while (1) + { + + dclear(); + + dprint(20,descente+13,elements[a].symbol,0); + sprintf(buffer,"%s",elements[a].nom); + dtext(40,descente+13,buffer); + + sprintf(buffer,"%d",a+1); // détail des éléments + dtext((10-a/25),descente+15,buffer); + + sprintf(buffer,"masse molaire %.3f g/mol",elements[a].masse_mol); + dtext(1,descente+23,buffer); + + dtext(20,descente+40,"propriete de base :"); // + + if (elements[a].groupe>=1) + { + sprintf(buffer,"groupe : %d ",elements[a].groupe); + dtext(1,descente+50,buffer); + } + + if ((a>55 && a<71) || (a>87 && a<103)) + dtext(1,descente+50,"pas de groupe"); + + sprintf(buffer,"periode : %d ",elements[a].periode); + dtext(1,descente+60,buffer); + + sprintf(buffer,"couch electro %s",elements[a].config_electro); + dtext(1,descente+70,buffer); + + sprintf(buffer,"famille %s",family[ajout[a].famille]); + dtext(1,descente+80,buffer); + + sprintf(buffer,"decouvert en %d",ajout[a].annee); + dtext(1,descente+90,buffer); + + sprintf(buffer,"etat a 293.15 K : %s",etat[ajout[a].etat]); + dtext(1,descente+100,buffer); + + dtext(20,descente+120,"reactivite :"); // + + if (elements[a].electro_neg==0) + { + dtext(1,descente+130,"electro neg inconnue"); + } + else + { + sprintf(buffer,"electro neg : %f ",elements[a].electro_neg); + dtext(1,descente+130,buffer); + } + + if (elements[a].valence>=0) + { + sprintf(buffer,"valence : %d ",elements[a].valence); + dtext(1,descente+140,buffer); + } + else + { + dtext(1,descente+140,"valence inconnue"); + } + + Mini("ret",5); + + key=getkey(); + + switch (key) + { + case KEY_RIGHT : a-=1,descente=-9; break; + case KEY_LEFT : a+=1,descente=-9; break; + case KEY_DOWN : descente-=4; break; + case KEY_UP : descente+=4; break; + case KEY_F6 : case KEY_EXE : case KEY_EXIT : return a; + } + + a=(a<0 ? 117 : a>117 ? 0 : a); + descente=(descente>-9 ? -9 : descente<-85 ? -85 : descente); // on fixe les limites de la page + } +} + +int find(chang) +{/* +char *numero=NULL; + +char i=0,j; + +const char buffer[50]; + +Bdisp_AllClr_DDVRAM(); +dtext(10,1,"Vous cherchez :"); +dtext(10,15,"1. numero de l'element"); +dtext(10,25,"2. masse molaire"); +dtext(10,35,"3. Symbole de l'element"); +dtext(10,45,"4. Nom de l'element"); + +while (1) + { + + EI_init(); + + EI_manage_config(EI_SET_COLUMN, 1); + EI_manage_config(EI_SET_ROW, 3); + EI_manage_config(EI_SET_START_MODE, EI_NORMAL); + + GetKey(&key); + + switch(key) + { + case 72 : + { + while(1) + { + Bdisp_AllClr_DDVRAM(); + dtext(1,1,"Vous cherchez l'element n :"); + + numero=EI_input_string(3,(const char*)"0123456789"); + // ça coupe ici + if (atoi(numero)>0 && atoi(numero)<119) // ça arrête le curseur + { + return atoi(numero)-1; + } + } + } + + case 62 : + { + while(1) + { + Bdisp_AllClr_DDVRAM(); + dtext(1,1,"Vous cherchez une masse"); + dtext(1,7,"molaire de :"); + + numero=EI_input_string(3,(const char*)"0123456789"); + + for (i=0;i<118;i++) + { + if (atoi(numero)==floor(elements[i].masse_mol+0.5)) + { + return i; + } + } + } + } + + case 52 : + { + while(1) + { + Bdisp_AllClr_DDVRAM(); + dtext(1,1,"Vous cherchez le symbole ?",0); + + EI_manage_config(EI_SET_START_MODE, EI_ALPHA_LOCKED); + + numero=EI_input_string(3,(const char*)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); + numero[0]=toupper (numero[0]); // on met le 1er caractère en majuscule + for (i=0;i<118;i++) + { + for (j = 1 ; numero[j] != '\0' ; j++) + { + numero[j] = tolower(numero[j]); // on met certains caractères en minuscule pour la recherche + } + + if (!strcmp(numero,elements[i].symbol)) + { + return i; + } + } + } + } + + case 73 : + { + while(1) + { + Bdisp_AllClr_DDVRAM(); + dtext(1,1,"Vous cherchez le nom ?",0); + + EI_manage_config(EI_SET_START_MODE, EI_ALPHA_LOCKED); + + numero=EI_input_string(13,(const char*)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); + numero[0]=toupper(numero[0]); // on met le 1er caractère en majuscule + for (i=0;i<118;i++) + { + for (j = 1 ; numero[j] != '\0' ; j++) + { + numero[j] = tolower(numero[j]);// on met certains caractères en minuscule pour la recherche + } + + if (!strcmp(numero,elements[i].nom)) + { + return i; + } + } + } + } + + case 47 : return chang; + + } + }*/ +} + +void calcul_mole() +{/* +char *str = NULL, *p=str; +char characts[20]={'\0'}; +char i=0; +float result=0, masse; +const char buffer[50]={0}; +char cap; + +while(1) +{ +Bdisp_AllClr_DDVRAM(); + +dtext(1,1,"Entrez votre formule : "); + +Mini("A a",0); + +EI_init(); + +EI_manage_config(EI_SET_COLUMN, 1); +EI_manage_config(EI_SET_ROW, 2); +EI_manage_config(EI_SET_START_MODE, EI_NORMAL); + +str=EI_input_string(25,(const char*)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); + +Bdisp_AllClr_DDVRAM(); + +sprintf(buffer,"%s",str); +PrintXY(64-3*strlen(str),10,buffer,36); + +while(*str) // on va jusqu'a la fin de la chaine + { + i=0; + + while(isalpha(*str)) // on prends seulement les lettres + { + characts[i]=tolower(*str); // on copie la lettre en minuscule directement dans characts + ++i; + ++str; + } + + characts[0]=toupper(characts[0]); // on met le 1er caractère en majuscule + + for(i=0;i<118;i++) // on se déplace dans les éléments de la structure + { + if(!strcmp(characts,elements[i].symbol)) + { + masse=elements[i].masse_mol; // on a la masse molaire + break; + } + } + + for(i=0;i<20;++i) // on remet tout à zéro : évite les erreurs + characts[i]='\0'; + + i=0; + + while(isdigit(*str)) // on prends seulement les chiffres + { + characts[i]=*str; // on copie la lettre dans characts + ++i; + ++str; + } + + result += atoi(characts)*masse; + + for(i=0;i<4;++i) // on remet tout à zéro : évite les erreurs + characts[i]='\0'; + } + +free(p); + +dtext(1,30,"la masse molaire est de"); + +sprintf(buffer,"%.3f g/mol",result); +dtext(1,40,buffer); + +Mini("calc",0); +Mini("ret",5); + +result=0; + +GetKey(&key); + +switch(key) + { + case 29 : return; + } + +}*/ +}