Post Reply 
ZIPP: G1CMZ's Immensely Practical Package
10-24-2015, 06:01 PM
Post: #4
RE: ZIPP: G1CMZ's Immensely Practical Package
Version 0.3:
User interface improved. Multilingual support added.
In English, et maintenant en francais aussi (translated with the help of Google).
Code:

#pragma mode( separator(.,;) integer(h32) )

 LOCAL ZIPPST:="ZIPP V 0.3 ";
 LOCAL SG:=" StephenG1CMZ";
 LOCAL CRID:=ZIPPST+"© 2015 "+SG;
 LOCAL NL:=CHAR(10);
 LOCAL SL:=1;

 LOCAL CDFROM,CDTO;
 EXPORT ZIPPROUND;//USER ROUNDING

 LOCAL THSPD_M;
 LOCAL MEAS_INTERVAL_S;

 LOCAL TOMI:=1.60344;//MILES UK
 LOCAL TONM:=1.852;//NAUTI

 //SI PREFIXES
 LOCAL YOTTA:=1ᴇ24;
 LOCAL ZETTA:=1ᴇ21;
 LOCAL EXA  :=1ᴇ18;
 LOCAL PETA :=1ᴇ15;
 LOCAL TERA :=1ᴇ12;
 LOCAL GIGA :=1ᴇ9;
 LOCAL MEGA :=1ᴇ6;
 LOCAL KILO :=1ᴇ3;
 LOCAL HECTO:=1ᴇ2;
 LOCAL DECA :=1ᴇ1;
 LOCAL DECI :=1ᴇ−1;
 LOCAL CENTI:=1ᴇ−2;
 LOCAL MILLI:=1ᴇ−3;
 LOCAL MICRO:=1ᴇ−6;
 LOCAL NANO :=1ᴇ−9;
 LOCAL PICO :=1ᴇ−12;
 LOCAL FEMTO:=1ᴇ−15;
 LOCAL ATTO :=1ᴇ−18;
 LOCAL ZEPTO:=1ᴇ−21;
 LOCAL YOCTO:=1ᴇ−24;

 LOCAL NMST:={" Nautical Miles"," Miles Nautique"};
 LOCAL LANGS:={"English","Français"};
 //e233

 
 LOCAL CHOICES:={{"ABOUT","HELP","CONVERT UNITS","MEASURE INTERVAL s","THUNDER DISTANCE","EXIT",LANGS},
 {"SUR","AIDEZ","CONVERTIR DES UNITÉS","INTERVALLE DE MESURE s","DISTANCEdeTONNERRE","AU REVOIR",LANGS}};

 EXPORT ABOUT ()
 BEGIN
  LOCAL ST:="StephenG1CMZ is a programmer and can work to your requirements."+NL;
  LOCAL SZ:="ZIPP provides useful practical results.
Ask, if you need technical results."+NL;
  LOCAL THANX:="Thanks Han for the CONVERT syntax."+NL; 
  LOCAL LGL:="No liability is accepted.";
  PRINT(); PRINT(CRID);
  PRINT(ST+NL+SZ);
  PRINT(THANX);
  PRINT(LGL);
  WAIT;
 END;

 MSNK()
 BEGIN
   LOCAL SNK:=MOUSE();
 END;

 TRIMMENU(INL)
 BEGIN
  LOCAL II;
  LOCAL OUTL:={};

  FOR II FROM 1 TO SIZE(INL)  DO
   OUTL(II):=REPLACE(STRING(INL(II)),"1_","");
  END;
  RETURN OUTL;  
 END;

 CONVERT_UNIT_GRP(unit,tname)
 BEGIN
  LOCAL x,menu,a1,a2,t;
  LOCAL UF;
  LOCAL TTL:={"To use SI prefixes: INPUT PREFIXNAME",
    "SI préfixe: Saisissez le nom du préfixe"};
  
  LOCAL EVUST:={
   ": Enter value(s) using: ",
   ": Entrez le(s) valeur(s) à l aide: "};
  LOCAL HLP:=tname+EVUST(SL);
  LOCAL UST:={"Units:","Unités:"};
  LOCAL TOST:={"To ","À "};
  LOCAL CNVRT:={"Convert","Convertir"};

  menu:=TRIMMENU(unit);//AUTO
  CHOOSE(CDFROM,UST(SL)+tname,menu);
  IF CDFROM THEN
   UF:=REPLACE(STRING(unit[CDFROM]),"1_",""); //TRIM 1_
   INPUT({{ x,[2],{45,20,3} }},TTL(SL),CNVRT(SL),HLP+UF);
   //DETECT ESC
   IF string(x,1) == "0" THEN RETURN; END;
   
   CHOOSE(CDTO, TOST(SL)+UST(SL)+tname, menu);
   a2 := unit[CDFROM];
   a1 := unit[CDTO];
   t := x + "*" + CONVERT(a2,a1);
   RETURN expr(t);
  END;
 END;

 EXPORT CONVERT_UNITS()
 BEGIN
  LOCAL CHSTYP;
  LOCAL TTL:={"Unit types","Types d unités"};
  LOCAL UTYP:={"Length","Area","Volume",
   "Time","Speed","Acceleration","Mass","Force",
   "Energy","Power","Pressure","Temperature:NO!",
   "Electricity","Light","Angle","Viscosity","Radiation"};

  LOCAL UL:={};

  CHOOSE(CHSTYP,TTL(SL),UTYP); 
  CASE
   IF CHSTYP==1 THEN //LENGTH
    //CONVERT_Length();
    UL:={1_m,1_cm,1_mm,1_km,1_in,1_ft,1_yd,1_mile,1_nmi,1_au,1_lyr,1_pc,1_Å};
   END;
   IF CHSTYP==2 THEN //AREA
    UL:={1_(cm²),1_(m²),1_(km²),1_(in²),1_(ft²),1_(yd²),1_(mile²),1_(miUS²),1_a​cre,1_ha,1_a,1_b};//A:Are B:Barn
    //CONVERT_UNIT_GRP(UL);
   END;
   IF CHSTYP==3 THEN //VOLUME
    UL:={1_(cm^3),1_(m^3),1_ml,1_l,1_(in^3),1_(ft^3),1_(yd^3),1_ptUK,1_galUK,1_​galUS};
    //CONVERT_UNIT_GRP(UL);
   END;
   IF CHSTYP==4 THEN //TIME
    UL:={1_s,1_min,1_h,1_d,1_yr,1_Hz};
   END;
   IF CHSTYP==5 THEN //SPEED
    UL:={1_(cm/s),1_(m/s),1_kph,1_(km/h),1_(ft/s),1_mph,1_(mile/h),1_knot,1_(rad/s),1_(tr/min),1_(tr/s)};
   END;
   IF CHSTYP==6 THEN //ACCEL
    UL:={1_(m/s²),1_(ft/s²),1_grav,1_Gal,1_(rad/s²)};
   END;
   IF CHSTYP==7 THEN //MASS
    UL:={1_g,1_kg,1_oz,1_lb,1_tonUK,1_tonUS,1_mol,1_u,1_t};
   END;
   IF CHSTYP==8 THEN //FORCE
    UL:={1_(kg*m/s²),1_N,1_dyn,1_lbf,1_kip,1_gf,1_pdl};
   END;
   IF CHSTYP==9 THEN //ENERGY
    UL:={1_(kg*m²/s²),1_J,1_Wh,1_kWh,1_(ft*lbf),1_kcal,1_cal,1_eV,1_MeV,1_Btu,1_erg,1_thermUK,1_th​ermEC,1_thermUS};
   END;
   IF CHSTYP==10 THEN //POWER
    UL:={1_(kg*m²/s^3),1_W,1_MW,1_hp,1_(ft*lbf/s)};
   END;
   IF CHSTYP==11 THEN //PRESSURE
    UL:={1_(kg/(m*s²)),1_Pa,1_bar,1_atm,1_psi,1_torr,1_mmHg,1_inHg,1_inH2O};
   END;
   IF CHSTYP==13 THEN //ELEC
    UL:={1_A,1_V,1_C,1_Ohm,1_F,1_Fdy,1_Wb,1_H,1_mho,1_T,1_(A*h),1_S};
   END;
   IF CHSTYP==14 THEN //LIGHT:HP MISSING MOST UNITS
    UL:={1_cd,1_flam};
   END;
   IF CHSTYP==15 THEN //ANGL
    UL:={1_rad,1_deg,1_arcmin,1_arcs,1_tr};
   END;
   IF CHSTYP==16 THEN //VISCOSITY
    UL:={1_(m²/s),1_P,1_St};
   END;
   IF CHSTYP==17 THEN //RADIATION
    UL:={1_Bq,1_Ci,1_Gy,1_rd,1_rem,1_Sv,1_R};
   END;
   DEFAULT
  END;
  IF SIZE(UL)>0 THEN //AND CHSTYP>0
   MSGBOX(CONVERT_UNIT_GRP(UL,UTYP(CHSTYP)),1);
  END;
 END;


 INPUT_INTERVAL_H(TTL)
 BEGIN
  LOCAL HH,MM,SS;
  LOCAL IV:={"Interval ","Intervalle "};
  LOCAL LBL:={IV(SL)+"HH",IV(SL)+"MM",IV(SL)+"SS"};
  LOCAL HLP1:={"Decimals & Fractions allowed",
    "Décimaux et les fractions permis"};
  LOCAL HLP:={HLP1(SL),HLP1(SL),HLP1(SL)};

  INPUT({HH,MM,SS},TTL,LBL,HLP,0,0);
  RETURN HH+(MM/60)+(SS/3600); 
 END;

 EXPORT MEASURE_INTERVAL_S()
 BEGIN
  LOCAL TICKB,TICKE,TICKL;
  LOCAL TS,KK;
  LOCAL MI:=0;
  
  LOCAL MST:={"MEASURE SHORT INTERVAL"+NL,
   "MESURE COURT INTERVALLE"+NL};
  LOCAL MST1:={"OK or Enter: Start"+NL,
   "OK ou Entrer: Commencez"+NL};
  LOCAL MST2:={"Enter:Enter HMS numerically"+NL,
   "Entrer: Entrez HMS numeriquement"+NL};
  LOCAL MST3:={"ANY KEY: End"+NL,
   "N importe quelle clé: Terminer"+NL};
  //LOCAL CNW:="CONNECTIVITY:NO HP DATA";
  LOCAL ENINST:={"Enter INTERVAL","Entrez INTERVALLE"};
  
  TICKB:=MSGBOX(MST(SL)+MST1(SL)+MST2(SL)+MST3(SL),1);
  IF TICKB THEN
   RECT();
   TICKB:=Ticks; TS:=Time;
   TICKL:=TICKB;
   REPEAT 
    MSNK;
    IF Ticks-TICKL≥1000 THEN
     TICKL:=Ticks;
     RECT();
     TEXTOUT_P(→HMS(ROUND((Ticks-TICKB)/1000,0)/3600),0,20);
     MSNK;
     TEXTOUT_P(TS+MST(SL),0,180);
     TEXTOUT_P(MST2(SL),0,200);
     TEXTOUT_P(MST3(SL),0,220);

    END;
    WAIT(0.001);
    MSNK;
    KK:=GETKEY;
   UNTIL KK≥0;
   TICKE:=Ticks;
   MI:=(TICKE-TICKB)/1000;
   IF KK==30 THEN //ENTER
    MI:=3600*INPUT_INTERVAL_H(ENINST(SL));
   END;
  END;
  RETURN MEAS_INTERVAL_S:=ROUND(MI,ZIPPROUND);   
 END;

 THUNDER_DISTANCE_CALC_M(INTERVAL_S,TEMP_C)
 //INTERVAL
 //CENTIGRADE (NORMAL RANGE)
 BEGIN
  LOCAL DISTM;

  THSPD_M:=331.4+0.6*TEMP_C;//M/S
  DISTM:=INTERVAL_S*THSPD_M;
  RETURN ROUND(DISTM,ZIPPROUND);
 END;

 EXPORT THUNDER_DISTANCE()
 BEGIN
  LOCAL OK;
  LOCAL THDST:={};
  LOCAL THDM,THDKM,THDMI,THDNM;
  LOCAL INTERVAL_S,TEMP_C;

  LOCAL TTL:=CHOICES(SL,5)+SG;
  LOCAL LBL:={{"Interval s","Temp C"},
   {"Intervalle s","Temp C"}};
  LOCAL HLP:={{"Interval sound-light. (0:use measured value)","Temp C eg 0..20:Ground −57: Aircraft"},
   {"Intervalle sonner-lumière. 0:La valeur de mesure","Temp C eg 0..20:Terre −57:Avion"}};
  OK:=INPUT({INTERVAL_S,TEMP_C},TTL,LBL(SL),HLP(SL),MEAS_INTERVAL_S,0);
  IF OK THEN
   IF INTERVAL_S≤0 THEN //IMPORT VALUE
    INTERVAL_S:=MEAS_INTERVAL_S;
   END;
   THDM:=THUNDER_DISTANCE_CALC_M(INTERVAL_S,TEMP_C);
   THDKM:=THDM/1000;
   THDMI:=THDKM/TOMI;
   THDNM:=THDKM/TONM;

   THDST(1):=ROUND(INTERVAL_S,0)+" s"+" @ "+ROUND(THSPD_M,ZIPPROUND)+" m/s"+NL;
   THDST(2):=THDM+" m "+ROUND(THDKM,ZIPPROUND)+" km"+NL;
   THDST(3):=ROUND(THDMI,ZIPPROUND)+" milesUK"+NL;
   THDST(4):=ROUND(THDNM,ZIPPROUND)+NMST(SL);
   MSGBOX(THDST(1)+THDST(2)+THDST(3)+THDST(4));
   RETURN THDST(2);
  END;
 END;

 
 ZIPP_HELP ()
 BEGIN
  LOCAL CHS;
  LOCAL HLPST:={"HELP","AIDEZ"};
  LOCAL PFXS:={"PREFIXES","PRÉFIXES"};
  LOCAL HLPCHO:={"SI "+PFXS(SL),"VARIABLES"};
  LOCAL HC:=CONCAT(HLPCHO,CHOICES(SL));

  LOCAL SIPRFX:={"
ENTER IN UPPERCASE
YOU GET WHAT YOU SAY 
Selecting Units/Prefix (Shift C) will not work."+NL,
"Entrez en majuscule
VOUS OBTENEZ QUEL CE VOUS DEMANDEZ
Selection Unites/Prefixe (Decalage C) ne marchant pas."+NL};
 LOCAL SIPRFXEG:="
3MILLI _m
3MILLI _cm 
3MILLI _inch"; 
  LOCAL ST:={"
To change the number of digits displayed:","
Pour changez l arondissement:"};
  LOCAL STEG:="
@Home:
 ZIPPROUND:=n  [n=−12..12]"+NL;

  LOCAL CVT:={"
Note that not all units within a group can be converted. Conversion between groups (eg length*length to area) is not implemented here.
SI prefixes OK.
Lists and variables OK."+NL, "
Notez que toutes les unités d un groupe ne_peuvent pas etre convertis.
SI préfixes OK.
Listes et variables OK"+NL};
  
  PRINT(); PRINT(CRID);
  CHOOSE(CHS,HLPST(SL),HC);
  IF CHS THEN
   PRINT(HC(CHS));
   CASE
    IF CHS==5 THEN PRINT(CVT(SL))  END;
    IF CHS==1 THEN PRINT(SIPRFX(SL)+SIPRFXEG) END;
    IF CHS==2 THEN PRINT(ST(SL)+STEG) END;
    IF CHS==3 THEN ABOUT() END;
    DEFAULT
   END;
   WAIT;
  END;
 END;

 SELECT_LANGUAGE()
 BEGIN
  LOCAL CHS;
  CHOOSE(CHS,LANGS(SL),LANGS);//CURRENT
  IF CHS THEN
   SL:=CHS;
  END; 
 END;


 EXPORT G1CMZ_IMMENSELY_PRACTICAL_PACKAGE ()
 BEGIN
  LOCAL CHS;
  
  REPEAT 
   CHOOSE(CHS,CRID,CHOICES(SL));
   CASE
    IF CHS==1 THEN ABOUT() END;
    IF CHS==2 THEN ZIPP_HELP() END;
    IF CHS==3 THEN CONVERT_UNITS() END;
    IF CHS==4 THEN MSGBOX(MEASURE_INTERVAL_S()+" s",1) END;
    IF CHS==5 THEN THUNDER_DISTANCE() END;
    IF CHS==6 THEN CHS:=0 END;
    IF CHS==7 THEN SELECT_LANGUAGE() END;
    DEFAULT
   END;
   //WAIT;
  UNTIL CHS==0;

 END;

 EXPORT ZIPP()
 BEGIN
  G1CMZ_IMMENSELY_PRACTICAL_PACKAGE();
 END;

Stephen Lewkowicz (G1CMZ)
https://my.numworks.com/python/steveg1cmz
Visit this user's website Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
RE: ZIPP: G1CMZ's Immensely Practical Package - StephenG1CMZ - 10-24-2015 06:01 PM



User(s) browsing this thread: 1 Guest(s)