Add something here ...
Add something here ...
Add something here ...
Add something here ...
Add something here ...
/* Filename: daystogo.kt */
// ******************************************************************
// ***
// *** Author: David Billsbrough
// *** Created: Sunday, August 18, 2024 at 18:22:44 PM (EDT)
// *** License: GNU General Public License -- version 2
// *** Version: $Revision: 0.42 $
// *** Warranty: None
// ***
// *** Purpose: Calculate the difference in days between two dates
// ***
// ******************************************************************
// $Id: daystogo.kt,v 0.42 2024/08/24 00:48:27 kc4zvw Exp kc4zvw $
import java.io.File
import java.text.SimpleDateFormat
import java.time.*
import java.time.format.*
import java.time.format.DateTimeFormatter.*
import java.time.format.DateTimeFormatterBuilder.*
import java.util.Date
import kotlin.math.abs
import kotlin.math.truncate
import kotlin.time.*
// Setup global variables and constants
val calendar_file = ".calendar"
val os_sep = "/"
val Now: Long = 13 /* a epoch time from a long time ago */
var unixTime = System.currentTimeMillis() / 1000
var localDate: LocalDate = LocalDate.now();
val spaces = "."
val event_date = spaces.repeat(20) // # working register 1
val event_name = spaces.repeat(60) // # working register 2
val Answer = spaces.repeat(80) // # allocate a 80 byte string
var dayCount = 0
// ------------------------------
//fun as_days( secs : Float ) : Long {
// val temp = secs / 86400
// val ans: Long = truncate(temp)
// return ans
//}
fun date_to_secs( str : String ) : String {
//return mktime (strptime "%Y/%m/%d" str)
return ""
}
fun formattedDate( d : Long ) : String {
val format_dt = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")
val current = LocalDateTime.now().format(format_dt)
val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
val value = formatter.parse(current.toString())
val dateFormatter = SimpleDateFormat("EEEEE, MMMMM dd, yyyy 'at' hh:mma (z)") //this format changeable
var newdate = dateFormatter.format(value)
return "$newdate"
}
// ------------------------------
// Notes: ((getenv "HOME") or "/home/kc4zvw")
fun get_home_dir() : String {
val myHOME = (System.getenv("HOME") ?: "").ifEmpty { "/home/kc4zvw" }
val formatted = ("My \$HOME directory is $myHOME.\n")
println(formatted)
return "$myHOME"
}
fun process_line( eventDate : String, eventName : String ) {
var answer = "$eventDate" + ":" + "$eventName"
// println( "Result: $answer" )
var dayCount = calc_dates( eventDate )
output_display( dayCount, eventName )
}
fun output_display( dayCount: Int, event_name: String ) {
val corrected: String = "$event_name"
val eventName: String = "$corrected"
val absolute_value: Int = abs(dayCount)
// println("The count is $dayCount")
// println("The name is $eventName")
if ( dayCount <= -2 ) {
val format = "It was $absolute_value days ago since $eventName."
println("$format")
} else if ( dayCount == -1 ) {
val format = ("Yesterday was $eventName.")
println("$format")
} else if ( dayCount == 0 ) {
val format = "Today is $eventName."
println("$format")
} else if ( dayCount == 1 ) {
val format = "Tomorrow is $eventName."
println("$format")
} else if ( dayCount >= 2 ) {
val format = "There are $dayCount days until $eventName."
println("$format")
} else {
val format = "No Match for $eventName.\n"
println("$format")
}
}
// ------------------------------
fun diff ( num1: Int, num2: Int ) : Int {
val ans: Int = num1 - num2
return ans
}
fun calc_dates( Date0: String ) : Int {
var Tgt: String = "yyyy/mm/dd"
val dateString: String = "$Date0"
val df: SimpleDateFormat = SimpleDateFormat("yyyy/MM/dd");
// df.setTimeZone(TimeZone.getTimeZone("UTC"))
val date: Date = df.parse(dateString)
val time: Long = date.getTime()
val target: Long = time / 1000
val Target1: Long = target
val Today: Long = unixTime
val numDays1: Long = Today / 86400
val numDays2: Long = Target1 / 86400
val diff: Long = (numDays2 - numDays1)
// println( "the difference is $diff" )
val deltaDays: Int = diff.toInt()
return deltaDays
}
// --------------------
fun display_banner() {
val Today = formattedDate(unixTime)
val textfmt = " Today's date is $Today.\n"
val dash = "="
val dashes = dash.repeat(64)
println()
println("Days To Go Calculator (Kotlin version)")
println()
println("$dashes")
println()
println("$textfmt")
println("$dashes")
println()
}
fun build_path_name() : String {
var myhome = get_home_dir()
var path_name = "$myhome$os_sep$calendar_file"
var fmt = "Filename: $path_name"
println( "$fmt\n" )
return "$path_name"
}
fun set_epoch_time(): Long {
val currentDateTime: java.util.Date = java.util.Date()
var currentTimestamp: Long = currentDateTime.time
return currentTimestamp
// return 999999 // defined as a global for now (see above)
}
/* Open text file for reading */
fun withOpenFile( filename: String, channelVar: Int, script: String ) {
//upvar 1 $channelVar chan
//val chan [open $filename]
//catch {
// uplevel 1 $script
//} result options
//close $chan
//return -options $options $result
}
// Notes: set infile [open $calendarFile {RDONLY EXCL}]
// println("Couldn't open $calendar-file for reading dates.\n")
// exit 2
// ---------------------
/* do main loop though the calendar file */
fun readFileAsLinesUsingReadLines(fileName: String): List
= File(fileName).readLines()
fun first_loop() {
val fileName = build_path_name()
var List3 = readFileAsLinesUsingReadLines(fileName)
for (line in List3) {
// println("Read line: $line")
var part1 = line.substring( 0, 10 )
var part2 = line.substring( 11 )
// println("part1=$part1 : part2=$part2")
process_line(part1, part2)
}
}
fun search_for_comments() {
/* will write this part later! */
// if a text line starts with a "#" it is a comment to be skipped over.
}
fun main_routine() {
set_epoch_time()
display_banner()
first_loop()
}
// ***----------------------------------***
// ** Main program begins here **
// ***----------------------------------***
fun main() {
main_routine()
println()
println("End of report")
}
// vim: syntax=kotlin tabstop=4 nowrap:
/* End of script */
Days To Go Calculator (Kotlin version) ================================================================ Today's date is Monday, November 11, 2024 at 06:05AM (EST). ================================================================ My $HOME directory is /home/kc4zvw. Filename: /home/kc4zvw/.calendar It was 33 days ago since TOPICS To Be Determined Offer to talk!. It was 5 days ago since Next NYC*BUG - "Life with a FreeBSD Laptop". It was 2 days ago since Maker Faire Orlando. There are 2 days until TOPICS To Be Determined Offer to talk!. There are 30 days until TOPICS To Be Determined Offer to talk!. End of report
Add something here ...