home *** CD-ROM | disk | FTP | other *** search
/ Amiga Special: Spiele Hits / Hits-CD.iso / aminet / spiele / ammud1_1.lha / AmigaMUD / Src / Extras / numbers.m < prev    next >
Text File  |  1997-01-30  |  2KB  |  124 lines

  1. /*
  2.  * Amiga MUD
  3.  *
  4.  * Copyright (c) 1997 by Chris Gray
  5.  */
  6.  
  7. /*
  8.  * numbers.m - code for English numbers.
  9.  */
  10.  
  11. private proc utility units(int n)string:
  12.     string s;
  13.  
  14.     s := SubString(
  15.         "*****"
  16.         "one  "
  17.         "two  "
  18.         "three"
  19.         "four "
  20.         "five "
  21.         "six  "
  22.         "seven"
  23.         "eight"
  24.         "nine ",
  25.         n * 5, 5);
  26.     Trim(s)
  27. corp;
  28.  
  29. private proc utility hundreds(int n)string:
  30.     string s;
  31.  
  32.     s := "";
  33.     if n >= 100 then
  34.     s := units(n / 100) + " hundred";
  35.     n := n % 100;
  36.     if n ~= 0 then
  37.         s := s + " and ";
  38.     fi;
  39.     fi;
  40.     if n >= 20 then
  41.     s := s + Trim(SubString(
  42.             "twenty "
  43.             "thirty "
  44.             "forty  "
  45.             "fifty  "
  46.             "sixty  "
  47.             "seventy"
  48.             "eighty "
  49.             "ninety ",
  50.             (n / 10 - 2) * 7, 7));
  51.     n := n % 10;
  52.     if n ~= 0 then
  53.         s := s + " ";
  54.     fi;
  55.     elif n >= 10 then
  56.     s := s + Trim(SubString(
  57.             "ten      "
  58.             "eleven   "
  59.             "twelve   "
  60.             "thirteen "
  61.             "fourteen "
  62.             "fifteen  "
  63.             "sixteen  "
  64.             "seventeen"
  65.             "eighteen "
  66.             "nineteen ",
  67.             (n - 10) * 9, 9));
  68.     n := 0;
  69.     fi;
  70.     if n ~= 0 then
  71.     s := s + units(n);
  72.     fi;
  73.     s
  74. corp;
  75.  
  76. public proc utility EnglishNumber(int n)string:
  77.     string s;
  78.     int frac;
  79.     bool needComma;
  80.  
  81.     if n = 0 then
  82.     "zero"
  83.     else
  84.     if n < 0 then
  85.         s := "minus ";
  86.         n := -n;
  87.     else
  88.         s := "";
  89.     fi;
  90.     needComma := false;
  91.     frac := n / 1000000000;
  92.     if frac ~= 0 then
  93.         s := s + hundreds(frac) + " billion";
  94.         needComma := true;
  95.         n := n % 1000000000;
  96.     fi;
  97.     frac := n / 1000000;
  98.     if frac ~= 0 then
  99.         if needComma then
  100.         s := s + ", ";
  101.         fi;
  102.         s := s + hundreds(frac) + " million";
  103.         needComma := true;
  104.         n := n % 1000000;
  105.     fi;
  106.     frac := n / 1000;
  107.     if frac ~= 0 then
  108.         if needComma then
  109.         s := s + ", ";
  110.         fi;
  111.         s := s + hundreds(frac) + " thousand";
  112.         needComma := true;
  113.         n := n % 1000;
  114.     fi;
  115.     if n ~= 0 then
  116.         if needComma then
  117.         s := s + if n >= 100 then ", " else " and " fi;
  118.         fi;
  119.         s := s + hundreds(n);
  120.     fi;
  121.     s
  122.     fi
  123. corp;
  124.