Compare commits

...

20 Commits

Author SHA1 Message Date
Alexander Andreev 5fa6142b21
From PKGBUILD removed provides and conflicts options. 2023-09-23 05:20:03 +04:00
Alexander Andreev ba6f28db2b
In main.h set VERSION to 1.1.1. 2023-09-23 05:16:47 +04:00
Alexander Andreev a999cf3b98
Removed makedepends from PKGBUILD, because gcc is a part of base-devel package. 2023-09-17 23:53:50 +04:00
Alexander Andreev 64bcbfbc45
if else was replaced by switch. Added handling for an unknown flag. 2023-09-17 23:49:06 +04:00
Alexander Andreev 18a593e800
Return 99 if an unknown flag occured. Also updated price_to_wattspersecond to price_kwh_to_wattspersecond. 2023-09-17 23:48:13 +04:00
Alexander Andreev cd84aee61f
Removed a space symbol after an * symbol. 2023-09-17 22:51:28 +04:00
Alexander Andreev caa57721f7
A func price_to_wattspersecond was renamed to price_kwh_to_wattspersecond. 2023-09-17 22:49:13 +04:00
Alexander Andreev ca7859f8f8
puts was replaced by fputs to set stderr output. In version changed years and an e-mail address. 2023-09-17 22:48:18 +04:00
Alexander Andreev 69ff91861b
Removed a space symbol after * symbol. Renamed price_to_wattspersecond to price_kwh_to_wattspersecond. 2023-09-17 22:47:17 +04:00
Alexander Andreev f4ce191ae7
Added PREFIX in Makefile.Fixed .PHONY. Standard c2x was changed to c99. 2023-09-17 22:46:12 +04:00
Alexander Andreev b0f1b367d2
Updated domain, added PREFIX to make, made use of $pkgver. Updated version to 1.1.1. 2023-09-17 22:45:14 +04:00
Alexander Andreev 044b898db3
Updated years and an e-mail in LICENSE. 2023-09-17 22:43:54 +04:00
Alexander Andreev aa6b0cd453
Version updated to 1.1.0.
Now, instead of git repo cloning, release archive is being used.
And let's remove that sentence from README.
2022-10-07 03:56:15 +04:00
Alexander Andreev cfa5c344cd
Added year 2022 to copyright.
Changed usage a little.
2022-10-07 03:51:52 +04:00
Alexander Andreev 7eecfbee01
Removed unnecessary (double) casting of interval_to_seconds result to interval_t. 2022-10-07 03:50:57 +04:00
Alexander Andreev d398de1f8f
to_wattspersecond() changed to price_to_wattspersecond(). 2022-10-07 03:49:56 +04:00
Alexander Andreev d7501eb2a9
Changed formatting for parse_arguments(). 2022-10-07 03:48:34 +04:00
Alexander Andreev 4e69cde16d
Weird int const chenged to const int in main(). 2022-10-07 03:46:56 +04:00
Alexander Andreev e68a52b95c [README.md] Decided to update our cost of kWh. :) 2022-10-06 22:09:17 +04:00
Alexander Andreev 8699dbae89
Added info on how to install a downloaded package in Arch Linux. 2022-04-10 21:08:19 +04:00
6 changed files with 53 additions and 53 deletions

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2021 Alexander "Arav" Andreev <me@arav.top>
Copyright (c) 2021-2023 Alexander "Arav" Andreev <me@arav.su>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

View File

@ -1,15 +1,15 @@
TARGET=kwh-cost
CFLAGS=--std=c2x -O3 -Wall -Werror -Wextra -pedantic
DESTDIR:=
PREFIX:=/usr/local
CFLAGS=--std=c99 -O3 -Wall -Werror -Wextra -pedantic
SRC_DIR=src
OBJ_DIR=obj
DESTDIR=/
.PHONY: all ${TARGET} clean install uninstall
all: ${TARGET}
.PHONY: clean install uninstall test
${TARGET}: ${SRC_DIR}/main.c ${SRC_DIR}/main.h
${CC} ${CFLAGS} ${LDFLAGS} $< -o $@
@ -18,12 +18,12 @@ clean:
rm ${TARGET}
install:
install -Dm755 ${TARGET} ${DESTDIR}usr/bin/${TARGET}
install -Dm644 LICENSE ${DESTDIR}usr/share/licenses/${TARGET}/LICENSE
install -Dm755 ${TARGET} ${DESTDIR}${PREFIX}/bin/${TARGET}
install -Dm644 LICENSE ${DESTDIR}${PREFIX}/share/licenses/${TARGET}/LICENSE
uninstall:
rm -f ${DESTDIR}usr/bin/${TARGET}
rm -rf ${DESTDIR}usr/share/licenses/${TARGET}
rm -f ${DESTDIR}${PREFIX}/bin/${TARGET}
rm -rf ${DESTDIR}${PREFIX}/share/licenses/${TARGET}
test:
@echo -n "Does input \"3.68 120 30d\" gives 317.95? "

View File

@ -1,16 +1,13 @@
# Maintainer: Alexander "Arav" Andreev <me@arav.top>
pkgname=kwh-cost-git
pkgver=1.0.0
# Maintainer: Alexander "Arav" Andreev <me@arav.su>
pkgname=kwh-cost
pkgver=1.1.1
pkgrel=1
pkgdesc="Calculates cost of electricity."
arch=('i686' 'x86_64' 'arm' 'armv6h' 'armv7h' 'aarch64')
url="https://git.arav.top/Arav/kwh-cost"
url="https://git.arav.su/Arav/kwh-cost"
license=('MIT')
makedepends=('git' 'gcc')
provides=('kwh-cost')
conflicts=('kwh-cost')
options=('strip')
source=('kwh-cost-git::git+https://git.arav.top/Arav/kwh-cost.git')
source=("${pkgver}.tar.gz::https://git.arav.su/Arav/kwh-cost/archive/${pkgver}.tar.gz")
md5sums=('SKIP')
build() {
@ -20,5 +17,5 @@ build() {
package() {
cd "$srcdir/$pkgname"
make DESTDIR="$pkgdir/" install
make DESTDIR="$pkgdir/" PREFIX="/usr" install
}

View File

@ -18,12 +18,10 @@ Options are `-v, --version` to show program's version; and `-h, --help` to show
Here is an example:
```console
$ kwh-cost 3.83 120 30d 2h
$ kwh-cost 4.02 120 30d 2h
```
Will give 331.83.
P.S.: Yeah, I pay 3.83 rubles per kWh. Which is just $0.05. :)
Will give 348.29.
## Installation
@ -33,4 +31,6 @@ First run `make` to build a program, and then `make install` to copy executable
### For ArchLinux
You can take a [PKGBUILD](/Arav/kwh-cost/raw/branch/master/PKGBUILD) file and in a directory with it run `makepkg -i`.
You can take a [PKGBUILD](/Arav/kwh-cost/raw/branch/master/PKGBUILD) file and in a directory with it run `makepkg -i`.
If you want to use a pre-built package for Arch from Releases, then install it using `pacman -U` command.

View File

@ -4,26 +4,25 @@
#include "main.h"
int main(int const argc, const char * const * const argv) {
int main(const int argc, const char *const *const argv) {
price_t price;
wattage_t wattage;
interval_t interval = 0;
int res = parse_arguments(argc, argv, &price, &wattage, &interval);
if (res != 0) {
if (res == 1)
print_usage();
else if (res == 2)
print_version();
exit(0);
}
switch (res) {
case 1: print_usage(); exit(0);
case 2: print_version(); exit(0);
case 99: fputs("Unknown flag provided.\n", stderr); print_usage(); exit(1);
}
printf("%.2Lf\n", (price * wattage) * interval);
return 0;
}
int parse_arguments(const int argc, const char *const *const argv, price_t *const price, wattage_t *const wattage, interval_t *const interval) {
int parse_arguments(const int argc, const char *const *const argv,
price_t *const price, wattage_t *const wattage, interval_t *const interval) {
if (argc < 2) return 1;
for (int i = 1, pos = 0; i < argc; ++i)
@ -32,21 +31,23 @@ int parse_arguments(const int argc, const char *const *const argv, price_t *cons
return 1;
else if (argv[i][1] == 'v' || argv[i][2] == 'v')
return 2;
else
return 99;
} else if (argc < 4) {
return 1;
} else if (pos == 0) {
*price = to_wattspersecond((price_t)atof(argv[i]));
*price = price_kwh_to_wattspersecond((price_t)atof(argv[i]));
++pos;
} else if (pos == 1) {
*wattage = (wattage_t)atof(argv[2]);
++pos;
} else
*interval += (interval_t)interval_to_seconds(argv[i]);
*interval += interval_to_seconds(argv[i]);
return 0;
}
inline interval_t interval_to_seconds(const char * const interval) {
inline interval_t interval_to_seconds(const char *const interval) {
interval_t intrvl = (interval_t)atol(interval);
switch (interval[strlen(interval) - 1]) {
@ -64,26 +65,27 @@ inline interval_t interval_to_seconds(const char * const interval) {
}
}
inline price_t to_wattspersecond(const price_t price) {
inline price_t price_kwh_to_wattspersecond(const price_t price) {
return price / 1000.f / 3600.f;
}
inline void print_version() {
puts("kwh-cost Ver. " VERSION "\n"
"Copyright (C) 2021 Alexander \"Arav\" Andreev <me@arav.top>. All rights reserved.\n"
"You can see a license for this program in /usr/share/licenses/kwh-cost/LICENSE.");
fputs("kwh-cost Ver. " VERSION "\n"
"Copyright (C) 2021-2023 Alexander \"Arav\" Andreev <me@arav.su>. All rights reserved.\n"
"You can see a license for this program in /usr/share/licenses/kwh-cost/LICENSE.\n", stderr);
}
inline void print_usage() {
puts("Usage: kwh-cost [OPTIONS] price wattage interval [interval ...]\n"
fputs("Usage: kwh-cost [OPTIONS] price wattage interval [interval ...]\n"
"Options:\n"
" --help, -h Display this usage information.\n"
" --version, -v Display program version.\n"
" --help, -h display this usage information.\n"
" --version, -v display program version.\n"
"Arguments:\n"
" price Price per kWh.\n"
" wattage Specify power usage in Watts.\n"
" interval Time interval in seconds total cost to be calculated for.\n"
" You may specify other time units such as:\n"
" m'inute, h'our, d'ay. Example: 5d 3h.\n"
" All given intervals will be summed up.");
" price price per kWh.\n"
" wattage power usage in Watts.\n"
" interval time interval in seconds during which\n"
" this much power to be constantly used.\n"
" You may specify other time units such as:\n"
" m'inute, h'our, d'ay. Example: 5d 3h.\n"
" All given intervals will be summed up.\n", stderr);
}

View File

@ -1,16 +1,17 @@
#ifndef _MAIN_H_
#define _MAIN_H_
#define VERSION "1.0.0"
#define VERSION "1.1.1"
typedef long double price_t;
typedef long double wattage_t;
typedef unsigned long interval_t;
int parse_arguments(const int argc, const char *const *const argv, price_t *const price, wattage_t *const wattage, interval_t *const interval);
int parse_arguments(const int argc, const char *const *const argv,
price_t *const price, wattage_t *const wattage, interval_t *const interval);
inline interval_t interval_to_seconds(const char * const interval);
inline price_t to_wattspersecond(const price_t price);
inline interval_t interval_to_seconds(const char *const interval);
inline price_t price_kwh_to_wattspersecond(const price_t price);
inline void print_version();
inline void print_usage();