#if 0
/*─────────────────────────────────────────────────────────────────╗
│ To the extent possible under law, Justine Tunney has waived      │
│ all copyright and related or neighboring rights to this file,    │
│ as it is written in the following disclaimers:                   │
│   • http://unlicense.org/                                        │
│   • http://creativecommons.org/publicdomain/zero/1.0/            │
╚─────────────────────────────────────────────────────────────────*/
#endif
#include "libc/calls/calls.h"
#include "libc/calls/termios.h"
#include "libc/isystem/unistd.h"
#include "libc/math.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
#include "libc/sysv/consts/termios.h"

#ifdef __x86_64__

/**
 * @fileoverview Bare Metal VGA TTY demo.
 *
 * This program can boot as an operating system. Try it out:
 *
 *     make -j8 o//examples/vga.com
 *     qemu-system-x86_64 -hda o//examples/vga.com -serial stdio
 *
 * Please note that, by default, APE binaries only use the serial port
 * for stdio. To get the VGA console as an added bonus:
 *
 *     __static_yoink("vga_console");
 *
 * Should be added to the top of your main() program source file.
 */

__static_yoink("vga_console");

int main(int argc, char *argv[]) {
  volatile long double x = -.5;
  volatile long double y = 1.5;
  struct termios tio;
  char buf[16];
  ssize_t res;
  if (tcgetattr(0, &tio) != -1) {
    tio.c_lflag &= ~(ECHO | ICANON);
    tcsetattr(0, TCSANOW, &tio);
  }
  write(1, "\e[5n", 4);
  res = read(0, buf, 4);
  if (res != 4 || memcmp(buf, "\e[0n", 4) != 0) {
    printf("res = %d?\n", res);
    return -1;
  }
  printf("\e[92;44mHello World!\e[0m %.19Lg\n", atan2l(x, y));

  // read/print loop so machine doesn't reset on metal
  for (;;) {
    if ((res = readansi(0, buf, 16)) > 0) {
      printf("got \e[97m%`'.*s\e[0m\r\n", res, buf);
    }
  }
}

#endif /* __x86_64__ */