sfeed_twtxt.c - sfeed - RSS and Atom parser
 (HTM) git clone git://git.codemadness.org/sfeed
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       sfeed_twtxt.c (1569B)
       ---
            1 #include <stdio.h>
            2 #include <string.h>
            3 #include <time.h>
            4 
            5 #include "util.h"
            6 
            7 static char *line;
            8 static size_t linesize;
            9 
           10 static void
           11 printfeed(FILE *fp, const char *feedname)
           12 {
           13         char *fields[FieldLast];
           14         struct tm parsedtm, *tm;
           15         time_t parsedtime;
           16         ssize_t linelen;
           17 
           18         while ((linelen = getline(&line, &linesize, fp)) > 0 &&
           19                !ferror(stdout)) {
           20                 if (line[linelen - 1] == '\n')
           21                         line[--linelen] = '\0';
           22                 parseline(line, fields);
           23 
           24                 parsedtime = 0;
           25                 if (!strtotime(fields[FieldUnixTimestamp], &parsedtime) &&
           26                     (tm = gmtime_r(&parsedtime, &parsedtm))) {
           27                         fprintf(stdout, "%04d-%02d-%02dT%02d:%02d:%02dZ\t",
           28                                 tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
           29                                 tm->tm_hour, tm->tm_min, tm->tm_sec);
           30                 } else {
           31                         fputs("\t", stdout);
           32                 }
           33                 if (feedname[0])
           34                         printf("[%s] ", feedname);
           35                 fputs(fields[FieldTitle], stdout);
           36                 if (fields[FieldLink][0]) {
           37                         fputs(": ", stdout);
           38                         fputs(fields[FieldLink], stdout);
           39                 }
           40                 putchar('\n');
           41         }
           42 }
           43 
           44 int
           45 main(int argc, char *argv[])
           46 {
           47         FILE *fp;
           48         char *name;
           49         int i;
           50 
           51         if (pledge(argc <= 1 ? "stdio" : "stdio rpath", NULL) == -1)
           52                 err(1, "pledge");
           53 
           54         if (argc <= 1) {
           55                 printfeed(stdin, "");
           56                 checkfileerror(stdin, "<stdin>", 'r');
           57         } else {
           58                 for (i = 1; i < argc; i++) {
           59                         if (!(fp = fopen(argv[i], "r")))
           60                                 err(1, "fopen: %s", argv[i]);
           61                         name = ((name = strrchr(argv[i], '/'))) ? name + 1 : argv[i];
           62                         printfeed(fp, name);
           63                         checkfileerror(fp, argv[i], 'r');
           64                         checkfileerror(stdout, "<stdout>", 'w');
           65                         fclose(fp);
           66                 }
           67         }
           68 
           69         checkfileerror(stdout, "<stdout>", 'w');
           70 
           71         return 0;
           72 }