#include <perms.h>
float Stor(_imp_string Input) {
  int Sign = 0;
  int Sym;
  int Pos = 1;
  double Value;
  double Exp;
  void Next(void) {
    Pos++;
    if (Pos > *Length(Input))
      Sym = 0;
    else
      Sym = *Charno(Input, Pos);
  }
  Sym = *Charno(Input, Pos);
  if (Sym == '-') {
    Sign = 1;
    Next();
  }
  Value = 0;
  if (Sym != '.') {
    if ('0' > Sym || Sym > '9') _imp_signal(6, 5, Pos, _imp_str_literal(""));
    do {
      Value = Value * 10.0 + (Sym - '0');
      Next();
    } while ('0' <= Sym && Sym <= '9');
  }
  if (Sym == '.') {
    Exp = 10.0;
    for (;;) {
      Next();
      if ('0' > Sym || Sym > '9') break;
      Value += (Sym - '0') / Exp;
      Exp = Exp * 10.0;
    }
  }
  if (Sym == '@') {
    Sym = Stoi;
    Value = Value * REXP(10.0, Sym);
  }
  if (Sign) Value = -Value;
  return (Value);
}
