mirror of
https://github.com/gburd/nix-config.git
synced 2024-11-15 08:46:25 +00:00
80 lines
2.1 KiB
Diff
80 lines
2.1 KiB
Diff
|
diff --git a/README.md b/README.md
|
||
|
index 103cc78..1e3b32e 100644
|
||
|
--- a/README.md
|
||
|
+++ b/README.md
|
||
|
@@ -17,10 +17,16 @@ $ make
|
||
|
```bash
|
||
|
trekscii [height] [width]
|
||
|
```
|
||
|
+
|
||
|
+`height` and `width` must be larger than `16` and `46`, respectively. If not
|
||
|
+specified, they will default to half the respective terminal dimension.
|
||
|
+
|
||
|
e.g.
|
||
|
|
||
|
```bash
|
||
|
-trekscii 25 85
|
||
|
+trekscii 25 85 # fixed dimensions
|
||
|
trekscii 35 $(tput cols) # terminal width, fixed height
|
||
|
trekscii $(tput lines) $(tput cols) # full-terminal
|
||
|
+trekscii $(tput lines) # full-terminal height, half-terminal width
|
||
|
+trekscii # half-terminal height, half-terminal width
|
||
|
```
|
||
|
diff --git a/src/trekscii.cpp b/src/trekscii.cpp
|
||
|
index 1b14d9a..2238ed1 100644
|
||
|
--- a/src/trekscii.cpp
|
||
|
+++ b/src/trekscii.cpp
|
||
|
@@ -1,7 +1,9 @@
|
||
|
#include <iostream>
|
||
|
+#include <sys/ioctl.h>
|
||
|
#include "trekscii.h"
|
||
|
|
||
|
-
|
||
|
+#define MIN_WIDTH 46
|
||
|
+#define MIN_HEIGHT 16
|
||
|
|
||
|
int main(int argc, char** argv) {
|
||
|
|
||
|
@@ -11,12 +13,36 @@ int main(int argc, char** argv) {
|
||
|
fread(&seed, 4, 1, devrnd);
|
||
|
fclose(devrnd);
|
||
|
srand(seed);
|
||
|
-
|
||
|
|
||
|
- int dimY = std::stoi(argv[1]);
|
||
|
- int dimX = std::stoi(argv[2]);
|
||
|
+ // get window size
|
||
|
+ struct winsize w;
|
||
|
+ ioctl(0, TIOCGWINSZ, &w);
|
||
|
+
|
||
|
+ int dimY;
|
||
|
+ if (argc >= 2) {
|
||
|
+ dimY = std::stoi(argv[1]);
|
||
|
+ if (dimY < MIN_HEIGHT) {
|
||
|
+ std::cerr << "Error: height must be at least " << MIN_HEIGHT << std::endl;
|
||
|
+ return 1;
|
||
|
+ }
|
||
|
+ } else {
|
||
|
+ // default to half terminal height, with MIN_HEIGHT min
|
||
|
+ dimY = std::max(w.ws_row / 2, MIN_HEIGHT);
|
||
|
+ }
|
||
|
+
|
||
|
+ int dimX;
|
||
|
+ if (argc >= 3) {
|
||
|
+ dimX = std::stoi(argv[2]);
|
||
|
+ if (dimX < MIN_WIDTH) {
|
||
|
+ std::cerr << "Error: width must be at least " << MIN_WIDTH << std::endl;
|
||
|
+ return 1;
|
||
|
+ }
|
||
|
+ } else {
|
||
|
+ // default to half terminal width, with MIN_WIDTH min
|
||
|
+ dimX = std::max(w.ws_col / 2, MIN_WIDTH);
|
||
|
+ }
|
||
|
|
||
|
Canvas canvas = Canvas(dimX, dimY - 2);
|
||
|
canvas.generate();
|
||
|
canvas.print();
|
||
|
-}
|
||
|
\ No newline at end of file
|
||
|
+}
|