emailler/apps/tweet65.c

196 lines
3.0 KiB
C

#include <cc65.h>
#include <fcntl.h>
#include <ctype.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#ifdef __APPLE2__
#include <apple2_filetype.h>
#endif
#include "../inc/ip65.h"
#include "ifttt.h"
char key[80 + 1];
char text[280 + 1];
void error_exit(void)
{
printf("- %s\n", ip65_strerror(ip65_error));
exit(EXIT_FAILURE);
}
void confirm_exit(void)
{
printf("\nPress any key ");
cgetc();
}
unsigned char cols(void)
{
unsigned char cols, rows;
screensize(&cols, &rows);
return cols;
}
void input(char* str, unsigned int max, const char* tag)
{
char chr;
uint8_t row;
uint16_t len = max / cols() + 1;
for (row = len; --row; row)
{
putchar('\n');
}
row = wherey() - len;
len = 0;
while (true)
{
str[len] = '\0';
gotoxy(0, row);
cprintf("%s (%d/%d) \r\n%s", tag, len, max, str);
cursor(1);
chr = cgetc();
cursor(0);
if (chr == CH_ENTER)
{
break;
}
if (chr == CH_DEL)
{
if (len == 0)
{
continue;
}
if (wherex() > 0)
{
gotox(wherex() - 1);
}
else
{
gotoxy(cols() - 1, wherey() - 1);
}
cputc(' ');
--len;
continue;
}
if (len == max)
{
continue;
}
if (isprint(chr))
{
str[len++] = chr;
}
}
}
int main(void)
{
int retval;
uint8_t eth_init = ETH_INIT_DEFAULT;
if (doesclrscrafterexit())
{
atexit(confirm_exit);
}
{
int file;
printf("\nLoading key ");
file = open("ifttt.key", O_RDONLY);
if (file != -1)
{
read(file, key, sizeof(key));
close(file);
printf("- Ok\n");
}
else
{
printf("- Failed\n\n\n");
input(key, sizeof(key) - 1, "IFTTT webhook key");
if (*key == '\0')
{
printf("\n");
return EXIT_FAILURE;
}
printf("\n\nSaving key ");
#ifdef __APPLE2__
_filetype = PRODOS_T_TXT;
#endif
file = open("ifttt.key", O_WRONLY | O_CREAT | O_TRUNC);
if (file != -1)
{
write(file, key, sizeof(key));
close(file);
printf("- Ok\n");
}
else
{
printf("- ");
perror(NULL);
}
}
}
#ifdef __APPLE2__
{
int file;
printf("\nSetting slot ");
file = open("ethernet.slot", O_RDONLY);
if (file != -1)
{
read(file, &eth_init, 1);
close(file);
eth_init &= 7;
}
printf("- %u\n", eth_init);
}
#endif
printf("\nInitializing ");
if (ip65_init(eth_init))
{
error_exit();
}
printf("- Ok\n\nObtaining IP address ");
if (dhcp_init())
{
error_exit();
}
printf("- Ok\n\n\n");
input(text, sizeof(text) - 1, "Text");
if (*text == '\0')
{
printf("\n");
return EXIT_FAILURE;
}
printf("\n\nSending tweet ");
retval = ifttt_trigger(key, "tweet", text, NULL, NULL);
if (retval < 0)
{
error_exit();
}
if (retval != 200)
{
printf("- Error (HTTP status %d)\n", retval);
exit(EXIT_FAILURE);
}
printf("- Ok\n");
return EXIT_SUCCESS;
}