Canola  0.8.D001
lib/number/insert.cc
Go to the documentation of this file.
00001 //
00002 // canola - canon canola 1614p emulator
00003 // Copyright (C) 2011, 2012 Peter Miller
00004 //
00005 // This program is free software; you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License, version 3, as
00007 // published by the Free Software Foundation.
00008 //
00009 // This program is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012 // General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License along
00015 // with this program. If not, see <http://www.gnu.org/licenses/>.
00016 //
00017 
00018 #include <lib/ac/assert.h>
00019 
00020 #include <lib/number.h>
00021 
00022 
00023 void
00024 number::insert_dot(void)
00025 {
00026     decimal = 0;
00027 }
00028 
00029 
00030 void
00031 number::insert_digit_before_dot(int n)
00032 {
00033     assert(n >= 0);
00034     assert(n < 10);
00035     value.build(n);
00036 }
00037 
00038 
00039 void
00040 number::insert_digit_after_dot(int n)
00041 {
00042     // <question>
00043     // What happens if too many decimal places are added?
00044     // What is displayed when "[C] 1234567890.123456" has been entered,
00045     // and the [7] is pressed?  Does it overflow, does it discard the 7
00046     // and leave the display unchanged, or something else?
00047     // </question>
00048     //
00049     // For now, we discard additional decimal places.
00050     //
00051     if (value.get_digit_count() < 16)
00052     {
00053         insert_digit_before_dot(n);
00054         ++decimal;
00055     }
00056 }
00057 
00058 
00059 // vim: set ts=8 sw=4 et :