/[james]/sargasso2/sargasso.c
ViewVC logotype

Diff of /sargasso2/sargasso.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 77 by james, Tue Sep 26 21:31:28 2006 UTC revision 81 by james, Sun Nov 26 16:57:32 2006 UTC
# Line 10  Line 10 
10  #include <stdio.h>  #include <stdio.h>
11  #include <string.h>  #include <string.h>
12  #include <sys/stat.h>  #include <sys/stat.h>
13    #include <sys/types.h>
14  #include <oslib/colourtrans.h>  #include <oslib/colourtrans.h>
15  #include <oslib/osfile.h>  #include <oslib/osfile.h>
16  #include <oslib/uri.h>  #include <oslib/uri.h>
# Line 26  Line 27 
27  #define FEEDS_WRITE "<Choices$Write>.Sargasso.Feeds"  #define FEEDS_WRITE "<Choices$Write>.Sargasso.Feeds"
28  #define CHOICES_READ "Choices:Sargasso.Choices"  #define CHOICES_READ "Choices:Sargasso.Choices"
29  #define CHOICES_WRITE "<Choices$Write>.Sargasso.Choices"  #define CHOICES_WRITE "<Choices$Write>.Sargasso.Choices"
30    #define WRITE_DIR "<Choices$Write>.Sargasso"
31    
32  typedef void (*click_callback)(unsigned int i);  typedef void (*click_callback)(unsigned int i);
33    
# Line 53  osspriteop_area *sprites; Line 55  osspriteop_area *sprites;
55  struct paragraph *main_window_paragraphs = 0;  struct paragraph *main_window_paragraphs = 0;
56  struct paragraph *feed_window_paragraphs = 0;  struct paragraph *feed_window_paragraphs = 0;
57  unsigned int current_feed = 0;  unsigned int current_feed = 0;
58    char font_headings[100] = "Homerton";
59    char font_summaries[100] = "NewHall";
60    char font_links[100] = "Homerton";
61    
62  #define ICON_FLAGS (wimp_ICON_TEXT | \  #define ICON_FLAGS (wimp_ICON_TEXT | \
63                  (wimp_COLOUR_BLACK << wimp_ICON_FG_COLOUR_SHIFT))                  (wimp_COLOUR_BLACK << wimp_ICON_FG_COLOUR_SHIFT))
# Line 70  wimp_MENU(2) main_menu = { { "Sargasso" Line 75  wimp_MENU(2) main_menu = { { "Sargasso"
75            { wimp_MENU_LAST, 0, ICON_FLAGS, { "Remove feed" } } } };            { wimp_MENU_LAST, 0, ICON_FLAGS, { "Remove feed" } } } };
76  wimp_menu *current_menu;  wimp_menu *current_menu;
77  unsigned int current_removing = 0;  unsigned int current_removing = 0;
78    wimp_i current_font_menu;
79    
80  const char *default_feeds[] = {  const char *default_feeds[] = {
81          "http://news.google.co.uk/?output=rss",          "http://news.google.co.uk/?output=rss",
# Line 124  int main(int argc, char *argv[]) Line 130  int main(int argc, char *argv[])
130          char error[200];          char error[200];
131          struct stat s;          struct stat s;
132    
133          memdebug_memdebug("memdump");  /*      memdebug_memdebug("memdump"); */
134    
135          if (!feed_init())          if (!feed_init())
136                  die(feed_error);                  die(feed_error);
# Line 136  int main(int argc, char *argv[]) Line 142  int main(int argc, char *argv[])
142          if (stat(FEEDS_READ, &s)) {          if (stat(FEEDS_READ, &s)) {
143                  warn("Welcome to Sargasso! A selection of feeds have been "                  warn("Welcome to Sargasso! A selection of feeds have been "
144                                  "added. To add more feeds, use the main menu.");                                  "added. To add more feeds, use the main menu.");
145                    mkdir(WRITE_DIR, S_IRWXU);
146                  for (unsigned int i = 0; i != sizeof default_feeds /                  for (unsigned int i = 0; i != sizeof default_feeds /
147                                  sizeof default_feeds[0]; i++)                                  sizeof default_feeds[0]; i++)
148                          feed_add(default_feeds[i]);                          feed_add(default_feeds[i]);
# Line 526  void mouse_click(wimp_w w, wimp_i i, int Line 533  void mouse_click(wimp_w w, wimp_i i, int
533                          set_icon_string(choices_window, 1, minutes);                          set_icon_string(choices_window, 1, minutes);
534                          xwimp_set_caret_position(choices_window, 1,                          xwimp_set_caret_position(choices_window, 1,
535                                          0, 0, -1, strlen(minutes));                                          0, 0, -1, strlen(minutes));
536                    } else if (i == 7 || i == 8 ||
537                                    i == 10 || i == 11 ||
538                                    i == 13 || i == 14) {
539                            if (i == 8 || i == 11 || i == 14)
540                                    i--;
541                            wimp_window_state state;
542                            wimp_icon_state icon_state;
543                            state.w = w;
544                            xwimp_get_window_state(&state);
545                            icon_state.w = w;
546                            icon_state.i = i;
547                            xwimp_get_icon_state(&icon_state);
548                            open_menu((wimp_menu *) rufl_family_menu,
549                                    state.visible.x0 + icon_state.icon.extent.x1,
550                                    state.visible.y1 + icon_state.icon.extent.y1);
551                            current_font_menu = i;
552                  }                  }
553          }          }
554  }  }
# Line 603  void key_pressed(wimp_key *key) Line 626  void key_pressed(wimp_key *key)
626  void menu_selection(wimp_selection *selection)  void menu_selection(wimp_selection *selection)
627  {  {
628          char minutes[10];          char minutes[10];
629            wimp_pointer pointer;
630    
631            xwimp_get_pointer_info(&pointer);
632    
633          if (current_menu == (wimp_menu *) &iconbar_menu) {          if (current_menu == (wimp_menu *) &iconbar_menu) {
634                  switch (selection->items[0]) {                  switch (selection->items[0]) {
635                  case 1:                  case 1:
636                          snprintf(minutes, sizeof minutes, "%i", interval / 60);                          snprintf(minutes, sizeof minutes, "%i", interval / 60);
637                          set_icon_string(choices_window, 1, minutes);                          set_icon_string(choices_window, 1, minutes);
638                            set_icon_string(choices_window, 8, font_headings);
639                            set_icon_string(choices_window, 11, font_summaries);
640                            set_icon_string(choices_window, 14, font_links);
641                          open_window(choices_window);                          open_window(choices_window);
642                          xwimp_set_caret_position(choices_window, 1,                          xwimp_set_caret_position(choices_window, 1,
643                                          0, 0, -1, strlen(minutes));                                          0, 0, -1, strlen(minutes));
# Line 638  void menu_selection(wimp_selection *sele Line 667  void menu_selection(wimp_selection *sele
667                                  warn(feed_error);                                  warn(feed_error);
668                          break;                          break;
669                  }                  }
670            } else if (current_menu == (wimp_menu *) rufl_family_menu) {
671                    char *font = ((wimp_menu *) rufl_family_menu)->
672                            entries[selection->items[0]].data.indirected_text.text;
673                    if (current_font_menu == 7)
674                            strncpy(font_headings, font, sizeof font_headings);
675                    else if (current_font_menu == 10)
676                            strncpy(font_summaries, font, sizeof font_summaries);
677                    else if (current_font_menu == 13)
678                            strncpy(font_links, font, sizeof font_links);
679                    set_icon_string(choices_window, 8, font_headings);
680                    set_icon_string(choices_window, 11, font_summaries);
681                    set_icon_string(choices_window, 14, font_links);
682                    update_main_window();
683                    if (feed_count)
684                            update_feed_window(current_feed);
685          }          }
686    
687            if (pointer.buttons == wimp_CLICK_ADJUST)
688                    xwimp_create_menu(current_menu, pointer.pos.x, pointer.pos.y);
689  }  }
690    
691    
# Line 747  void update_main_window(void) Line 794  void update_main_window(void)
794    
795                  p = add_paragraph(&main_window_paragraphs, 0, y, 700,                  p = add_paragraph(&main_window_paragraphs, 0, y, 700,
796                                  0xffaa99, 0x000000,                                  0xffaa99, 0x000000,
797                                  "Homerton", style, 200,                                  font_headings, style, 200,
798                                  feeds[i].title ? (char *) feeds[i].title :                                  feeds[i].title ? (char *) feeds[i].title :
799                                  feeds[i].url,                                  feeds[i].url,
800                                  click_main_window, i);                                  click_main_window, i);
# Line 776  void update_main_window(void) Line 823  void update_main_window(void)
823                  }                  }
824                  p = add_paragraph(&main_window_paragraphs, 700, y, 1000,                  p = add_paragraph(&main_window_paragraphs, 700, y, 1000,
825                                  0xffaa99, 0x000000,                                  0xffaa99, 0x000000,
826                                  "Homerton", style, 200,                                  font_headings, style, 200,
827                                  status + i * 40,                                  status + i * 40,
828                                  click_main_window, i);                                  click_main_window, i);
829                  y = p->y1 = y1;                  y = p->y1 = y1;
# Line 784  void update_main_window(void) Line 831  void update_main_window(void)
831                  if (feeds[i].error) {                  if (feeds[i].error) {
832                          p = add_paragraph(&main_window_paragraphs, 0, y, 1000,                          p = add_paragraph(&main_window_paragraphs, 0, y, 1000,
833                                          0, 0x0000a0,                                          0, 0x0000a0,
834                                          "NewHall", style, 200,                                          font_summaries, style, 200,
835                                          feeds[i].error,                                          feeds[i].error,
836                                          click_main_window, i);                                          click_main_window, i);
837                          y = p->y1;                          y = p->y1;
# Line 793  void update_main_window(void) Line 840  void update_main_window(void)
840                  if (feeds[i].description) {                  if (feeds[i].description) {
841                          p = add_paragraph(&main_window_paragraphs, 0, y, 1000,                          p = add_paragraph(&main_window_paragraphs, 0, y, 1000,
842                                          0, 0x000000,                                          0, 0x000000,
843                                          "NewHall", rufl_WEIGHT_400, 200,                                          font_summaries, rufl_WEIGHT_400, 200,
844                                          feeds[i].description,                                          feeds[i].description,
845                                          click_main_window, i);                                          click_main_window, i);
846                          y = p->y1;                          y = p->y1;
# Line 875  void update_feed_window(unsigned int i) Line 922  void update_feed_window(unsigned int i)
922    
923          p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,          p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,
924                          0xffaa99, 0x000000,                          0xffaa99, 0x000000,
925                          "Homerton", rufl_WEIGHT_400, 200,                          font_headings, rufl_WEIGHT_400, 200,
926                          feeds[i].title ? (char *) feeds[i].title : feeds[i].url,                          feeds[i].title ? (char *) feeds[i].title : feeds[i].url,
927                          0, 0);                          0, 0);
928          y = p->y1;          y = p->y1;
# Line 883  void update_feed_window(unsigned int i) Line 930  void update_feed_window(unsigned int i)
930          if (feeds[i].link) {          if (feeds[i].link) {
931                  p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,                  p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,
932                                  0, 0xff0000,                                  0, 0xff0000,
933                                  "Homerton", rufl_WEIGHT_400, 160,                                  font_links, rufl_WEIGHT_400, 160,
934                                  feeds[i].link,                                  feeds[i].link,
935                                  click_feed_link, i);                                  click_feed_link, i);
936                  y = p->y1;                  y = p->y1;
# Line 891  void update_feed_window(unsigned int i) Line 938  void update_feed_window(unsigned int i)
938          if (feeds[i].pub_date) {          if (feeds[i].pub_date) {
939                  p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,                  p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,
940                                  0, 0x0060ee,                                  0, 0x0060ee,
941                                  "NewHall", rufl_WEIGHT_400 | rufl_SLANTED, 160,                                  font_summaries, rufl_WEIGHT_400 | rufl_SLANTED,
942                                    160,
943                                  feeds[i].pub_date,                                  feeds[i].pub_date,
944                                  0, 0);                                  0, 0);
945                  y = p->y1;                  y = p->y1;
# Line 899  void update_feed_window(unsigned int i) Line 947  void update_feed_window(unsigned int i)
947          if (feeds[i].description) {          if (feeds[i].description) {
948                  p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,                  p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,
949                                  0, 0x000000,                                  0, 0x000000,
950                                  "NewHall", rufl_WEIGHT_400, 200,                                  font_summaries, rufl_WEIGHT_400, 200,
951                                  feeds[i].description,                                  feeds[i].description,
952                                  0, 0);                                  0, 0);
953                  y = p->y1;                  y = p->y1;
# Line 907  void update_feed_window(unsigned int i) Line 955  void update_feed_window(unsigned int i)
955          if (feeds[i].copyright) {          if (feeds[i].copyright) {
956                  p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,                  p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,
957                                  0, 0x666666,                                  0, 0x666666,
958                                  "NewHall", rufl_WEIGHT_400 | rufl_SLANTED, 160,                                  font_summaries, rufl_WEIGHT_400 | rufl_SLANTED, 160,
959                                  feeds[i].copyright,                                  feeds[i].copyright,
960                                  0, 0);                                  0, 0);
961                  y = p->y1;                  y = p->y1;
# Line 921  void update_feed_window(unsigned int i) Line 969  void update_feed_window(unsigned int i)
969    
970                  p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,                  p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,
971                                  0xa0dddd, 0x000000,                                  0xa0dddd, 0x000000,
972                                  "Homerton", style, 200,                                  font_headings, style, 200,
973                                  feeds[i].item[j].title ?                                  feeds[i].item[j].title ?
974                                          (char *) feeds[i].item[j].title : "",                                          (char *) feeds[i].item[j].title : "",
975                                  0, j);                                  0, j);
# Line 930  void update_feed_window(unsigned int i) Line 978  void update_feed_window(unsigned int i)
978                  if (feeds[i].item[j].pub_date) {                  if (feeds[i].item[j].pub_date) {
979                          p = add_paragraph(&feed_window_paragraphs, 0, y, 420,                          p = add_paragraph(&feed_window_paragraphs, 0, y, 420,
980                                          0, 0x0060ee,                                          0, 0x0060ee,
981                                          "NewHall",                                          font_summaries,
982                                          rufl_WEIGHT_400 | rufl_SLANTED, 160,                                          rufl_WEIGHT_400 | rufl_SLANTED, 160,
983                                          feeds[i].item[j].pub_date,                                          feeds[i].item[j].pub_date,
984                                          0, j);                                          0, j);
# Line 940  void update_feed_window(unsigned int i) Line 988  void update_feed_window(unsigned int i)
988                  if (feeds[i].item[j].author) {                  if (feeds[i].item[j].author) {
989                          p = add_paragraph(&feed_window_paragraphs, 420, y, 720,                          p = add_paragraph(&feed_window_paragraphs, 420, y, 720,
990                                          0, 0x666666,                                          0, 0x666666,
991                                          "NewHall",                                          font_summaries,
992                                          rufl_WEIGHT_400 | rufl_SLANTED, 160,                                          rufl_WEIGHT_400 | rufl_SLANTED, 160,
993                                          feeds[i].item[j].author,                                          feeds[i].item[j].author,
994                                          0, j);                                          0, j);
# Line 950  void update_feed_window(unsigned int i) Line 998  void update_feed_window(unsigned int i)
998                  if (feeds[i].item[j].category) {                  if (feeds[i].item[j].category) {
999                          p = add_paragraph(&feed_window_paragraphs, 720, y, 1000,                          p = add_paragraph(&feed_window_paragraphs, 720, y, 1000,
1000                                          0, 0xee6000,                                          0, 0xee6000,
1001                                          "NewHall", rufl_WEIGHT_400, 160,                                          font_summaries, rufl_WEIGHT_400, 160,
1002                                          feeds[i].item[j].category,                                          feeds[i].item[j].category,
1003                                          0, j);                                          0, j);
1004                          if (y1 < p->y1)                          if (y1 < p->y1)
# Line 961  void update_feed_window(unsigned int i) Line 1009  void update_feed_window(unsigned int i)
1009                  if (feeds[i].item[j].link) {                  if (feeds[i].item[j].link) {
1010                          p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,                          p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,
1011                                          0, 0xff0000,                                          0, 0xff0000,
1012                                          "Homerton", rufl_WEIGHT_400, 160,                                          font_links, rufl_WEIGHT_400, 160,
1013                                          feeds[i].item[j].link,                                          feeds[i].item[j].link,
1014                                          click_item_link, j);                                          click_item_link, j);
1015                          y = p->y1;                          y = p->y1;
# Line 970  void update_feed_window(unsigned int i) Line 1018  void update_feed_window(unsigned int i)
1018                  if (feeds[i].item[j].description) {                  if (feeds[i].item[j].description) {
1019                          p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,                          p = add_paragraph(&feed_window_paragraphs, 0, y, 1000,
1020                                          0, 0x000000,                                          0, 0x000000,
1021                                          "NewHall", rufl_WEIGHT_400, 180,                                          font_summaries, rufl_WEIGHT_400, 180,
1022                                          feeds[i].item[j].description,                                          feeds[i].item[j].description,
1023                                          0, j);                                          0, j);
1024                          y = p->y1;                          y = p->y1;
# Line 1171  void choices_save(void) Line 1219  void choices_save(void)
1219                  return;                  return;
1220          }          }
1221          fprintf(choices, "interval: %i\n", interval);          fprintf(choices, "interval: %i\n", interval);
1222            fprintf(choices, "font_headings: %s\n", font_headings);
1223            fprintf(choices, "font_summaries: %s\n", font_summaries);
1224            fprintf(choices, "font_links: %s\n", font_links);
1225          fclose(choices);          fclose(choices);
1226  }  }
1227    
# Line 1194  void choices_load(void) Line 1245  void choices_load(void)
1245          }          }
1246          while (fgets(s, sizeof s, choices)) {          while (fgets(s, sizeof s, choices)) {
1247                  sscanf(s, "interval: %i", &interval);                  sscanf(s, "interval: %i", &interval);
1248                    sscanf(s, "font_headings: %s", font_headings);
1249                    sscanf(s, "font_summaries: %s", font_summaries);
1250                    sscanf(s, "font_links: %s", font_links);
1251          }          }
1252          fclose(choices);          fclose(choices);
1253  }  }
# Line 1285  void set_icon_string(wimp_w w, wimp_i i, Line 1339  void set_icon_string(wimp_w w, wimp_i i,
1339    
1340          xwimp_set_icon_state(w, i, 0, 0);          xwimp_set_icon_state(w, i, 0, 0);
1341  }  }
   

Legend:
Removed from v.77  
changed lines
  Added in v.81

  ViewVC Help
Powered by ViewVC 1.1.26