Re: Budget Builder
- Posted by Senator Oct 01, 2020
- 1678 views
-- -- get_datetime.e v3 -- Kenneth Rhodes -- include std/console.e include std/datetime.e -- -- ymd(Y) returns current year -- ymd(M) returns current month -- ymd(D) returns current day -- enum Y,M,D function ymd(integer ymd) sequence tmp = now() if ymd<Y or ymd>D then return 0 end if return tmp[ymd] end function -- overides std/datetime.e new() function -- defaults to current year,month, day: -- {Y,M,D,0,0,0} instead of {0,0,0,0,0,0} -- as defined in std/datetime.e function new(integer year=ymd(Y), integer month=ymd(M), integer day=ymd(D), integer hour=0, integer minute=0, atom second=0) return {year,month,day,hour,minute,second} end function constant MENU = { -- accessor "\t\t Enter Year: #: ", --1 YEAR "\t\t Enter Month: #: ", --2 MONTH "\t\t Enter Day: #: ", --3 DAY "\t\t Enter Hour: #: ", --4 HOUR "\t\t Enter Minute: #: ", --5 MINUTE "\t\t Enter Seconds: #: " --6 SECOND } public constant USE_MENU = 1, NO_MENU = 0 public function get_datetime(integer Max_Accessor=SECOND,integer menu=NO_MENU,sequence yr={}) sequence r -- range for prompt_number datetime dtnow = now(), -- {Y,M,D,H,M,S} dt = new() -- {Y,M,D,0,0,0} if not(menu) then -- auto entry datetime data returned from now() function if Max_Accessor=SECOND then dt=now() -- {Y,M,D,H,M,S} elsif Max_Accessor=HOUR then dt[HOUR]=dtnow[HOUR] -- {Y,M,D,H,0,0} elsif Max_Accessor=MINUTE then dt[HOUR]=dtnow[HOUR] dt[MINUTE]=dtnow[MINUTE]-- {Y,M,D,H,M,0} end if return dt elsif USE_MENU then -- enter datetime data: y/m/d/hr using MENU for i = 1 to Max_Accessor do switch i do case YEAR then r = yr case MONTH then r = {1,12} case DAY then r = {1,31} case HOUR then r = {0,23} case MINUTE then r = {0,59} case SECOND then r = {0,60} case else return 0 end switch dt[i] = prompt_number(MENU[i],r) -- overwrites default dt values end for end if return dt end function constant DT_MENU = sprintf("%s", { """ Set Date/Time 0 = Auto entry of current date/time data from system 1 = Manual Entry of date/time data #: """ }) include std/types.e -- choose auto or manual entry of datetime data from menu public function dt_menu(integer MAX_ACCESSOR=SECOND) datetime dt integer m = prompt_number(DT_MENU,{NO_MENU, USE_MENU}) if m then dt=get_datetime(MAX_ACCESSOR, USE_MENU) else dt=get_datetime(MAX_ACCESSOR, NO_MENU) end if return dt end function
Regards, Ken