Post Reply 
A program to toggle between prefixes
04-23-2016, 10:40 PM
Post: #7
RE: A program to toggle between prefixes
there was some invisible spaces...

this should works
Code:

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

 LOCAL ZUST:="Z UNITS V 0.1 ";
 LOCAL SG:=" StephenG1CMZ";
 LOCAL CRID:=ZUST+"© 2015 "+SG;
 LOCAL NL:=CHAR(10);
 LOCAL OKC;

 LOCAL DEFLT_LANG();
 LOCAL SL:=DEFLT_LANG();

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

 LOCAL MEAS_INTERVAL_S;
 LOCAL VBITS,VBPS,VS;
 //LOCAL TOMI:=1.60344;//MILES UK
 //LOCAL TONM:=1.852;//NAUTI
 
 //PLANCK NIST 2014
   //LOCAL PLANCK; //ANY OF...
   //UNUSED TO AVOID CONFUSION IN AREA/VOLUME:
   //USER MUST SPECIFY WHICH
 LOCAL PLANCK_GEV:=1.220910ᴇ19;
 LOCAL PLANCK_KG:=2.176470ᴇ−8;
 LOCAL PLANCK_K:=1.416808ᴇ32;
 LOCAL PLANCK_M:=1.616229ᴇ−35;
 LOCAL PLANCK_S:=5.39116ᴇ−44;

 //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;

 //DATA UNITS:CAPACITY
 LOCAL UBITS:="bits";
 LOCAL UBY:="Bytes";
 LOCAL UCH:="Characters";//Characters
 //LOCAL UITEMS:="Items";//TRANSACTIONS
 LOCAL UWD:="Words(−.)";
 LOCAL BYZ:=8;//CHANGE IF U NEED STARTSTOP BITS
 LOCAL DATAS:={1,BYZ,2*BYZ,4*BYZ,8*BYZ}; //−1};
 //DATA UNITS:THROUGHPUT
 LOCAL UBPS:="bps";
 LOCAL UBYPS:="(Byte/s)";
 LOCAL UCPS:="(CPS)";
 LOCAL UWPM:="WPM(Morse)";
 LOCAL TML:={"s","s","s","s","s"};//SIZE MATCH
 
 //UNITS
 //LOCAL NMST:={" Nautical Miles",""," Miles Nautique"};
 LOCAL TKINDLST:={"Celcius (Centigrade)","Fahrenheit","kelvin","Planck"};
 
 LOCAL WSYS:={"System","","Système"};
 LOCAL LANGS:={"English","","Français"};
 LOCAL EN:=1; LOCAL FR:=3;
 //e233

 //WORDS
 //LOCAL WBINA:={"Binary","","Binaire"};
 LOCAL WCAPACITY:={"Capacity","","La Capacité"};
 LOCAL WRATE:={"Throughput","","Taux/Débit"};

 LOCAL WENTERZ:={"Enter","","Entrez"};
 LOCAL WHELP:={"Help","","Aide"};
 LOCAL WINTERVAL:={"Interval","","Intervalle"};
 LOCAL WPREFIX:={"Prefix","","Préfixe"};
 LOCAL WTIME:={"Time","","Temps"};
 LOCAL WUNITS:={"Units","","Unités"};
 LOCAL WTEMPE:={"Temperature","","Température"};
 LOCAL WCNVTT:={"Convert "+WTEMPE(EN),"","Convertir la "+WTEMPE(FR)};
 LOCAL WCNVTU:={"Convert Units","","Convertir des Unités","Konwersja Jednowstek"};
 LOCAL WDATAU:={"Data Units","","Les unités de données"};
 LOCAL WIGN:={"Ignored","","Ignoré"};
 LOCAL WNOPRFX:={"Do not use Prefix","","Ne pas utiliser Préfixe"};
 LOCAL WSOLVE:={"Solve for","","Résoudre pour"};
 LOCAL WVALU:={"Value","","La valeur"};
 LOCAL WNOO:={"/0","","/0"};

 LOCAL CHOICES:={{"ABOUT/"+WHELP(EN),"",WCNVTU(EN),"Measure Interval s and HMS->s","",LANGS,"EXIT"},
 {},
 {"A PROPOS/"+WHELP(FR),"",WCNVTU(FR),"Intervalle de Mesure s et HMS->s","",LANGS,"QUITTER"}};//FR:P
 
 LOCAL DATATYPES:={{WCAPACITY(EN),WRATE(EN),WTIME(EN)},{"","",""},
 {WCAPACITY(FR),WRATE(FR),WTIME(FR)}};

 EXPORT ABOUT ()
 BEGIN
  LOCAL ST:="StephenG1CMZ is a programmer and can work to your requirements."+NL;
  LOCAL SZ:="Z UNITS is a program for unit conversion.
"+NL;
  LOCAL THANX:="Thanks Han for the CONVERT syntax.
Thanks Primer."+NL; 
  LOCAL LGL:="No liability is accepted.";
  PRINT(); PRINT(CRID);
  PRINT(ST+NL+SZ);
  PRINT(THANX);
  PRINT(LGL);
  WAIT;
 END;

 RUP(RR)
 BEGIN //ROUNDUP:POSITIVEREAL ONLY
  RETURN IP(RR);IFTE(FP(RR),1,0);
 END;

 TEMP_F2C(FF)
 BEGIN
  RETURN (FF-32)*5/9;
 END;
 TEMP_C2F(CC)
 BEGIN
  RETURN (9/5)*CC+32;
 END;

 TEMP_K2C(KK)
 BEGIN
   RETURN KK-273.15;
 END;
 TEMP_C2K(CC)
 BEGIN
  RETURN CC+273.15;
 END;
 TEMP_P2K(PP)
 BEGIN
  RETURN PP*PLANCK_K;
 END;
 TEMP_K2P(KK)
 BEGIN
  RETURN KK/PLANCK_K;
 END;
 CONVERT_TEMP ()
 BEGIN
  LOCAL OK,TKIND;
  LOCAL TEMP,TEMP_C:=0;
    //INITIALISE TO AVOID ESCAPE RETURNING 0C=0F=0K
  LOCAL TEMP_F:=TEMP_C2F(TEMP_C),TEMP_K:=TEMP_C2K(TEMP_C);
  LOCAL TEMP_P:=TEMP_K2P(TEMP_K); 
  LOCAL TTL:=WCNVTT(SL);
  LOCAL LBL:={WUNITS(SL),WTEMPE(SL)};
  LOCAL HLP:=""; 
  
  OK:=INPUT({{TKIND,TKINDLST},TEMP},TTL,LBL,HLP,1,1);
  IF OK THEN
   CASE
    IF TKIND==1 THEN //C
     TEMP_C:=TEMP;
     TEMP_F:=TEMP_C2F(TEMP_C);
     TEMP_K:=TEMP_C2K(TEMP_C);
     TEMP_P:=TEMP_K2P(TEMP_K);
    END;
    IF TKIND==2 THEN //F
     TEMP_F:=TEMP;
     TEMP_C:=TEMP_F2C(TEMP_F);
     TEMP_K:=TEMP_C2K(TEMP_C);
     TEMP_P:=TEMP_K2P(TEMP_K);
    END;
    IF TKIND==3 THEN //K
     TEMP_K:=TEMP;
     TEMP_C:=TEMP_K2C(TEMP_K);
     TEMP_F:=TEMP_C2F(TEMP_C);
     TEMP_P:=TEMP_K2P(TEMP_K);
    END;
    IF TKIND==4 THEN //P
     TEMP_P:=TEMP;
     TEMP_K:=TEMP_P2K(TEMP_P);
     TEMP_C:=TEMP_K2C(TEMP_K);
     TEMP_F:=TEMP_C2F(TEMP_C);
    END;
    DEFAULT
   END;
  //ALGM VALID FOR 0..1PLANCK UNLIMITED
  END;

  RETURN {TEMP_C+TKINDLST(1),TEMP_F+TKINDLST(2),TEMP_K+TKINDLST(3)};//PLANCKS NOT SHOWN
 END;

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

 DATA_UNITS()
 BEGIN
  LOCAL VH,SI,NC,II,ST,NUM;
  LOCAL OK,CHS,TM,TMU,QTYU,THRU,VALU,SLV;
 //+64ETC NEEDS TIDYING
  LOCAL QTYTP:={UBITS,UBY,UBITS+16,UBITS+32,UBITS+64}; //,UWD};//BUG:SIZES MUST MATCH
  LOCAL THRUTP:={UBPS,UBYPS,UBPS+16+UCPS,UBPS+32,UBPS+64}; //,UWPM};
  LOCAL TTL:={"","",WNOPRFX(SL)};
  LOCAL LBL;//
  LOCAL HLP3:={{"","Select "+WPREFIX(EN),"Select Units","Select 2^10=1024 or 10^3=1000 (SI)",
  "Select to solve for this unit type"},{"","","","",""},
   {"","Selectionnez "+WPREFIX(FR),"Selectionnez Unites","Selectionnez 2^10=1024 ou 10^3=1000 (SI)",
   "Selectionnez à résoudre pour ce type d unité"}};
  LOCAL PFX,USEBIN;
  //LOCAL PFX0:={"No Prefix"};
  LOCAL PFXN,PFXNSTEP;
  LOCAL PFXS:={" ","[k|K]","M","G","T"};//,"G","T","P","E","Z"};
  LOCAL VALUES;//{}

  REPEAT

   OK:=CHOOSE(CHS,WDATAU(SL)+SG,DATATYPES(SL));
   IF OK THEN
    LBL:={WVALU(SL),WPREFIX(SL),DATATYPES(SL,CHS),"2^",WSOLVE(SL)};
    CASE
     IF CHS==1  THEN //CAPACITY
      OK:=INPUT({VALU,{PFX,PFXS},{QTYU,QTYTP},{USEBIN,1},{SLV,1}},TTL(1),LBL, HLP3(SL),1,1);
      IF OK THEN
       PFXNSTEP:=IFTE(USEBIN,2^10,10^3);
       PFXN:=IFTE(USEBIN,2^(10*(PFX-1)),1000^(PFX-1)); 
       IF SLV THEN //B=BPS*S
        VBITS:=VS*VBPS;
       ELSE
        VBITS:=VALU*PFXN*DATAS(QTYU);
       END;
       VALUES:=VBITS/{DATAS};
       MSGBOX(VALUES); 
       VALUES:=VALUES(1);//UNLIST?
       REPEAT 
        OKC:=CHOOSE(NC,"",QTYTP);
        IF OKC THEN       
         NUM:=VALUES(NC);
         ST:="";
         FOR II FROM  1 TO SIZE(PFXS) DO
          ST:=ST+(NUM/(PFXNSTEP^(II-1)))+PFXS(II)+QTYTP(NC)+NL;
         END;
         MSGBOX(ST); 
        END;
       UNTIL OKC==0;

      END;
     END;
     IF CHS==2  THEN //THROUGHPUT
      OK:=INPUT({VALU,{PFX,PFXS},{THRU,THRUTP},{USEBIN,1},{SLV,1}},TTL(2),LBL,HLP​3(SL),1,1);
      IF OK THEN
       PFXNSTEP:=IFTE(USEBIN,2^10,10^3);
       PFXN:=IFTE(USEBIN,2^(10*(PFX-1)),1000^(PFX-1));
       IF SLV THEN //BPS=B/S
        IF VS==0 THEN
         MSGBOX(WNOO(SL));
         VBPS:=0;
        ELSE
         VBPS:=VBITS/VS;
        END;
       ELSE
        VBPS:=VALU*PFXN*DATAS(THRU);
       END;
       VALUES:=VBPS/{DATAS};
       MSGBOX(VALUES);
       VALUES:=VALUES(1);
       REPEAT
        OKC:=CHOOSE(NC,"",THRUTP);
        IF OKC THEN
         ST:="";
         NUM:=VALUES(NC);
         FOR II FROM 1 TO SIZE(PFXS)  DO
          ST:=ST+(NUM/(PFXNSTEP^(II-1)))+PFXS(II)+THRUTP(NC)+NL;
         END;
         MSGBOX(ST);
        END;
       UNTIL OKC==0;

      END;
     END;
     IF CHS==3 THEN //TIME    
      OK:=INPUT({VALU,{PFX,PFXS},{TMU,TML},{USEBIN,1},{SLV,1}},TTL(3),LBL,HLP3(SL​),1,1);  
      VALU:=IFTE(VALU==0,MEAS_INTERVAL_S,VALU);
    
      IF OK THEN
       PFXN:=IFTE(USEBIN,2^(10*(PFX-1)),1000^(PFX-1));
       IF PFXN==1 THEN
       ELSE //HOW
        MSGBOX(WPREFIX(SL)+" "+WIGN(SL)) ;
       END;
       IF SLV THEN //S=B/BPS
        //MSGBOX(VBITS);
        IF VBPS==0 THEN
         MSGBOX(WNOO(SL));
         VS:=0;
        ELSE
         VS:=VBITS/VBPS;
        END;
       ELSE
        VS:=VALU;
       END;
       VH:=VS/60/60;
       MSGBOX({VS,→HMS(VH)});
      END;  
     END;
     DEFAULT
    END;
   
   END;
  UNTIL CHS==0;
 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) in: ","",
   ":Entrez la/les valeur(s) avec: "};//FR:P
  LOCAL HLP:=tname+EVUST(SL);
  LOCAL TOST:={"To ","","À "};
  LOCAL CNVRT:={"Convert","","Convertir"};

  menu:=TRIMMENU(unit);//AUTO
  CHOOSE(CDFROM,WUNITS(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)+WUNITS(SL)+":"+tname, menu);
   a2 := unit[CDFROM];
   a1 := unit[CDTO];
   t := x + "*" + CONVERT(a2,a1);
   
   RETURN expr(t);
  END;
 END;

 CONVERT_UNITS_HP()
 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"},
 {},
 {"Longueur","Surface","Volume",
    "Heure","Vitesse","Accélération","Masse","Force",
    "Energie","Puissance","Pression","Température:NON!",
    "Electricité","Lumière","Angle","Viscosité","Radiation"}};
 //TESTING:PUISSANCE(POWER) IS LONGEST INPUT STRING

  LOCAL UL:={};

  REPEAT
   CHOOSE(CHSTYP,TTL(SL),UTYP(SL)); 
   CASE
    IF CHSTYP==1 THEN //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
    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};
    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==12 THEN //TEMP
     //UL:={1_K,1_°C,1_°F};
    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
     IF CHSTYP≤17 THEN //HP
      OKC:=MSGBOX(CONVERT_UNIT_GRP(UL,UTYP(SL,CHSTYP)),1);
     //ELSE //SL
     // CONVERT_GRP_SL(UL,UTYP(SL,CHSTYP));
     END;
   END;
  UNTIL OKC==0;
 END;

 Z_CONVERT_UNITS ()
 BEGIN
  LOCAL CHS,OKC;
  LOCAL TTL:=WCNVTU(SL)+SG;
  CHOOSE(CHS,TTL,{WCNVTT(SL),WCNVTU(SL),WDATAU(SL)});
  IF CHS THEN
    CASE
     IF CHS==1 THEN 
      REPEAT
       OKC:=MSGBOX(CONVERT_TEMP(),1); 
      UNTIL OKC==0;
     END;
     IF CHS==2 THEN CONVERT_UNITS_HP() END;
     IF CHS==3 THEN DATA_UNITS() END;
     DEFAULT
    END;
   END; 
 END;

 INPUT_INTERVAL_H(TTL)
 BEGIN
  LOCAL HH,MM,SS,OK;

  LOCAL LBL:={WINTERVAL(SL)+" HH",WINTERVAL(SL)+" MM",WINTERVAL(SL)+" SS"};
  LOCAL HLP1:={"Decimals & Fractions allowed","",
    "Décimaux et fractions autorisés"};//FR:P
  LOCAL HLP:={HLP1(SL),HLP1(SL),HLP1(SL)};

  OK:=INPUT({HH,MM,SS},TTL,LBL,HLP,0,0);
  IF OK THEN
   RETURN HH+(MM/60)+(SS/3600); 
  ELSE
   RETURN 0; //CANCEL
   //HOW TO SIGNAL CANCEL?
  END;
 END;

 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";
  
  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(WENTERZ(SL)+" "+WINTERVAL(SL));
    //IDEALLY IF A CANCEL IS DETECTED
    //OUGHT TO RESUME MEASURED TIMING
   END;
  END;
  MEAS_INTERVAL_S:=MI;
  RETURN ROUND(MI,ZIPPROUND);   
 END;
 
 Z_UNITS_HELP ()
 BEGIN
  LOCAL CHS,OK;
  //LOCAL HLPCHO:={"VARIABLES"};//NOT IMPLEMENTED
  LOCAL HLPCHO:={};
  LOCAL HC:=CONCAT(CHOICES(SL),HLPCHO);
  
  LOCAL SIPRFX:={"
Values may include SI prefixes.
ENTER IN UPPERCASE: Selecting Units/Prefix (Shift C) will not work."+NL,"",
"Les valeurs peuvent inclure des SI préfixes. Entrez en majuscule: Selection Unites/Préfixe (Decalage C) ne marchant pas."+NL};
 LOCAL SIPRFXEG:="
3         _m
3NANO     _m
3MILLI    _inch
1PLANCK_M _m";
 
  LOCAL ST:={"
To change the number of digits displayed:","","
Pour changez la précision affichée:"};//FR:P
  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};

  LOCAL TRBY:="Traduit par "+SG+" et ......";

  PRINT(); PRINT(CRID);
 
  OK:=CHOOSE(CHS,WHELP(SL),HC);
  IF CHS THEN
   PRINT(HC(CHS));
   CASE
    IF CHS==1 THEN ABOUT() END;
    IF CHS==3 THEN 
     PRINT(CVT(SL));WAIT;
     OK:=MSGBOX(SIPRFX(SL),1);
     OK:=MSGBOX(SIPRFXEG,1);
    END;
    IF CHS==6 THEN PRINT(TRBY) END;
    IF CHS==8 THEN PRINT(ST(SL)+STEG) END;
    DEFAULT
   END;
   WAIT;
  END;
 END;

 DEFLT_LANG()
 BEGIN
  LOCAL DEF:=1;//PROG DEFAULT
  IF Language==1  OR Language==3 THEN
   DEF:=Language;
  END;
  RETURN DEF;
 END;

 SELECT_LANGUAGE()
 BEGIN
  LOCAL CHS;
  //LOCAL DEF:=1;//PROG DEFAULT IF LANG UNKNOWN
  
  CHOOSE(CHS,LANGS(SL),CONCAT(LANGS,{WSYS(SL)}));//CURRENT
  IF CHS AND CHS≠2 THEN
   SL:=CHS;
   IF CHS==4 THEN SL:=DEFLT_LANG(); END;
  END;
 END;

 Z_UNITS_DO ()
 BEGIN
  LOCAL CHS;

  SL:=DEFLT_LANG();
  REPEAT 
   CHOOSE(CHS,CRID,CHOICES(SL));
   CASE
    IF CHS==1 THEN Z_UNITS_HELP() END;
    IF CHS==3 THEN Z_CONVERT_UNITS() END;
    IF CHS==4 THEN 
     MSGBOX(MEASURE_INTERVAL_S()+" s",1);
     VS:=MEAS_INTERVAL_S;//?ALWAYS?OR ONLY WHEN 0?
    END;
   
    IF CHS==7 THEN CHS:=0 END;
    IF CHS==6 THEN SELECT_LANGUAGE() END;
    DEFAULT
   END;
   
  UNTIL CHS==0;

 END;

 EXPORT Z_UNITS()
 BEGIN
  Z_UNITS_DO();
 END;

∫aL√0mic (IT9CLU) :: HP Prime 50g 41CX 71b 42s 39s 35s 12C 15C - DM42, DM41X - WP34s Prime Soft. Lib
Visit this user's website Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
RE: A program to toggle between prefixes - salvomic - 04-23-2016 10:40 PM



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