home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / SHSUCD11.ZIP / TYPES.ADB < prev    next >
Text File  |  1995-06-29  |  4KB  |  126 lines

  1. --************************************************************************
  2. --
  3. --  TYPES.ADB               Version 3.0
  4. --
  5. --  A copyright-reserved, free use program.
  6. --  (c)John H. McCoy, 1994,1995, Sam Houston St. Univ., TX 77341-2206
  7. --************************************************************************
  8. with text_io; use text_io;
  9. with bit_ops, unchecked_conversion;
  10. package body Types is
  11.  
  12. function byte_to_byte_integer is new
  13.    unchecked_conversion(byte, byte_integer);
  14. function byte_integer_to_byte is new
  15.    unchecked_conversion(byte_integer, byte);
  16.  
  17. function "+"(left, right: byte) return byte is
  18. begin
  19.    return byte_integer_to_byte(byte_to_byte_integer(left) +
  20.                                byte_to_byte_integer(right));
  21. end "+";
  22.  
  23. function "OR"(left, right: byte) return byte is
  24. use bit_ops;
  25. begin
  26.    return byte_integer_to_byte(byte_to_byte_integer(left) OR
  27.                                byte_to_byte_integer(right));
  28. end "OR";
  29.  
  30. function "AND"(left, right: byte) return byte is
  31. use bit_ops;
  32. begin
  33.    return byte_integer_to_byte(byte_to_byte_integer(left) AND
  34.                                byte_to_byte_integer(right));
  35. end "AND";
  36.  
  37. function word_to_integer is new
  38.    unchecked_conversion(word, integer);
  39. function integer_to_word is new
  40.    unchecked_conversion(integer, word);
  41.  
  42. function "+"(left, right: word) return word is
  43. begin
  44.    return integer_to_word(word_to_integer(left) +
  45.                           word_to_integer(right));
  46. end "+";
  47.  
  48. function "OR"(left, right: word) return word is
  49. use bit_ops;
  50. begin
  51.    return integer_to_word(word_to_integer(left) OR
  52.                           word_to_integer(right));
  53. end "OR";
  54.  
  55. function "AND"(left, right: word) return word is
  56. use bit_ops;
  57. begin
  58.    return integer_to_word(word_to_integer(left) AND
  59.                           word_to_integer(right));
  60. end "AND";
  61.  
  62. function W_to_integer is new
  63.    unchecked_conversion(W, integer);
  64. function integer_to_W is new
  65.    unchecked_conversion(integer, W);
  66.  
  67. function "+"(left, right: W) return W is
  68. begin
  69.    return integer_to_W(W_to_integer(left) +
  70.                           W_to_integer(right));
  71. end "+";
  72.  
  73. function "OR"(left, right: W) return W is
  74. use bit_ops;
  75. begin
  76.    return integer_to_W(W_to_integer(left) OR
  77.                           W_to_integer(right));
  78. end "OR";
  79.  
  80. function "AND"(left, right: W) return W is
  81. use bit_ops;
  82. begin
  83.    return integer_to_W(W_to_integer(left) AND
  84.                           W_to_integer(right));
  85. end "AND";
  86.  
  87. function TOD (Date: calendar.time) return string5 is
  88.      Sec : calendar.Day_Duration := (calendar.Seconds(Date));
  89.      Min : integer ;
  90.      Hr  : integer ;
  91.      T   : string5 := "  :  ";
  92.      subtype Numerals is character range '0'..'9';
  93.      Offset : integer := character'pos(Numerals'first);
  94. begin
  95.      Min := integer(Sec/60);
  96.      Hr  := Min/60;
  97.      Min := Min - Hr * 60;
  98.      if Hr = 24 then
  99.         Hr := 0;
  100.      end if;
  101.      T(1) := Numerals'val(Hr/10 + Offset);
  102.      T(2) := Numerals'val(Hr rem 10 + Offset);
  103.      T(4) := Numerals'val(Min/10 + Offset);
  104.      T(5) := Numerals'val(Min rem 10 + Offset);
  105.      return T;
  106. end TOD;
  107.  
  108. function MDY (Date: calendar.time) return string8 is
  109.      M : calendar.month_number := calendar.month(Date);
  110.      D : calendar.day_number := calendar.day(Date);
  111.      Y : integer := calendar.year(Date) - 1900;
  112.      T : string8 := "  /  /  ";
  113.      subtype Numerals is character range '0'..'9';
  114.      Offset : integer := character'pos(Numerals'first);
  115. begin
  116. put_line(integer'image(Y));
  117.      T(1) := Numerals'val(M/10 + Offset);
  118.      T(2) := Numerals'val(M rem 10 + Offset);
  119.      T(4) := Numerals'val(D/10 + Offset);
  120.      T(5) := Numerals'val(D rem 10 + Offset);
  121.      T(7) := Numerals'val(Y/10 + Offset);
  122.      T(8) := Numerals'val(Y rem 10 + Offset);
  123.      return T;
  124. end MDY;
  125.  
  126. end Types;