Initial commit with working cli

master
Wynd 2025-07-24 19:01:38 +03:00
commit 1716001eb3
2 changed files with 88 additions and 0 deletions

1
.gitignore vendored 100644
View File

@ -0,0 +1 @@
main

87
main.nim 100644
View File

@ -0,0 +1,87 @@
import std/cmdline
import std/parseopt
import std/strutils
type TimeOrTicks = object
isTime: bool
isTicks: bool
type Time = object
seconds: int = 0
minutes: int = 0
hours: int = 0
days: int = 0
proc convertToTicks(time: var Time): int =
time.hours += time.days * 24
time.minutes += time.hours * 60
time.seconds += time.minutes * 60
time.seconds * 20
proc convertToTime(ticks: var int): Time =
# Note that here div is used for integer division specifically
const secondsInHour = 3600
ticks = ticks div 20
var days = ticks div (24 * secondsInHour)
ticks = ticks mod (24 * secondsInHour)
var hours = ticks div secondsInHour
ticks = ticks mod secondsInHour
var minutes = ticks div 60
ticks = ticks mod 60
var seconds = ticks
Time(seconds: seconds, minutes: minutes, hours: hours, days: days)
when isMainModule:
var params = commandLineParams()
var p = initOptParser(params)
var check = TimeOrTicks()
var time = Time()
var ticks = 0
while true:
p.next()
case p.kind
of cmdEnd: break
of cmdArgument: continue
of cmdShortOption, cmdLongOption:
case p.key
of "t":
if check.isTime:
quit("Cannot convert ticks while converting time")
ticks = parseInt(p.val)
check.isTicks = true
of "s":
if check.isTicks:
quit("Cannot convert time while converting ticks")
time.seconds = parseInt(p.val)
check.isTime = true
of "m":
if check.isTicks:
quit("Cannot convert time while converting ticks")
time.minutes = parseInt(p.val)
check.isTime = true
of "h":
if check.isTicks:
quit("Cannot convert time while converting ticks")
time.hours = parseInt(p.val)
check.isTime = true
of "d":
if check.isTicks:
quit("Cannot convert time while converting ticks")
time.days = parseInt(p.val)
check.isTime = true
if check.isTime:
var result = convertToTicks(time)
echo "Ticks: ", result
else:
var result = convertToTime(ticks)
echo "Days: ", result.days, "\nHours: ", result.hours, "\nMinutes: ", result.minutes, "\nSeconds: ", result.seconds