home *** CD-ROM | disk | FTP | other *** search
- #include "DeskLib:Dialog.h" /* High-level dialogue windows */
- #include "DeskLib:Error.h" /* Error despatcher */
- #include "DeskLib:Event.h" /* Event despatcher */
- #include "DeskLib:EventMsg.h" /* Wimp Message event dispatcher */
- #include "DeskLib:File.h" /* Low level file handling */
- #include "DeskLib:GFX.h" /* Graphics routines (GFX_Wait) */
- #include "DeskLib:Handler.h" /* Default/example event handlers */
- #include "DeskLib:Hourglass.h" /* Hourglass module interfaces */
- #include "DeskLib:Icon.h" /* Icon handling automation */
- #include "TimsLib:Menu.h" /* Menu create & show support */
- #include "TimsLib:Msgs.h" /* Message translation code */
- #include "DeskLib:Resource.h" /* Handles finding resource files */
- #include "DeskLib:Screen.h" /* Getting screen size info, etc */
- #include "DeskLib:Sound.h" /* Sound System control */
- #include "DeskLib:SWI.h"
- #include "TimsLib:SWIs.h"
- #include "DeskLib:Template.h" /* Template loading and caching */
- #include "DeskLib:WimpSWIs.h" /* Low-level WIMP commands */
- #include "DeskLib:Window.h" /* Window handling automation */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #include "http.h"
- #include "requester.h"
- #include "Utils.h"
-
- static linklist_header requests = {NULL, NULL};
-
- static BOOL quit = FALSE; /* Set to TRUE to quit the app. */
- static menu mainmenu = NULL; /* Pointer to our main menu */
-
- static window_handle info_w = 0;
-
- #define VERSION __TIME__" "__DATE__
-
- static BOOL HTTP_Rx(event_pollblock *event, void *reference)
- {
- arcweb_msg *webmsg;
- char buffer[512];
- http_req *ptr;
-
- for (ptr = (http_req *) LinkList_FirstItem(&requests); ptr != NULL;
- ptr = (http_req *) LinkList_NextItem((linklist_header *) ptr))
- {
- if (ptr->sentmsg.header.myref == event->data.message.header.yourref)
- {
- sprintf(buffer, "copy %s %s ~c~vfd", event->data.message.data.bytes, ptr->webfile);
- OSCLI(buffer);
- webmsg = (arcweb_msg *) ptr->webmsg.data.bytes;
- if (webmsg->flags & arcweb_FLAGS_image_fetch)
- File_SetType(ptr->webfile, 0xFFF);
- else
- File_SetType(ptr->webfile, 0x345);
- /* ptr->webmsg.header.yourref = ptr->webmsg.header.myref; */
- ptr->webmsg.header.action = message_ARCWEBDONE;
- webmsg->data.fetch_done.expiry.use_default_expiry = -1;
- Wimp_SendMessage(event_SENDWANTACK, &ptr->webmsg, ptr->sender, 0);
- LinkList_Unlink(&requests, (linklist_header *) ptr);
- free(ptr->webfile);
- free(ptr);
- }
- }
- return(TRUE);
- }
-
- static BOOL FetchRequest(event_pollblock *event, void *reference)
- {
- arcweb_msg *webmsg = (arcweb_msg *) event->data.message.data.bytes;
- char webfile[256], site[80];
- char *colon;
- http_req *req;
- int port, slash, sender;
- message_block sendmsg;
-
- if (strnicmp(webmsg->data.fetch_request.URL, "http:", 5) == 0)
- {
- /* SWI(0, 0, 0x104);
- printf("%s \n", webmsg->data.fetch_request.URL); */
- event->data.message.header.yourref = event->data.message.header.myref;
- sender = event->data.message.header.sender;
- Wimp_SendMessage(event_ACK, &event->data.message,
- event->data.message.header.sender, 0);
- SWI(6, 0, OS_Args, 7, webmsg->data.fetch_request.localfile, webfile, 256, 256, 256);
- File_Close(webmsg->data.fetch_request.localfile);
- slash = strcspn(&webmsg->data.fetch_request.URL[7], "/");
- strncpy(site, &webmsg->data.fetch_request.URL[7], slash);
- site[slash] = '\0';
- colon = strchr(site, ':');
- if (colon != NULL)
- {
- port = atoi(&colon[1]);
- colon[0] = '\0';
- }
- else
- {
- port = 80;
- }
- sprintf(sendmsg.data.bytes, "trf %s %d \"GET %s\"", site, port, &webmsg->data.fetch_request.URL[7 + slash]);
- sendmsg.header.size = 256;
- sendmsg.header.myref = 0;
- sendmsg.header.yourref = 0;
- sendmsg.header.action = 0x823F0;
- Wimp_SendMessage(event_SEND, &sendmsg, 0, 0);
-
- if (webmsg->flags & arcweb_FLAGS_image_fetch)
- webmsg->flags = ((webmsg->flags & 0x66BE0000) | 0x40000695);
- else
- webmsg->flags = ((webmsg->flags & 0x66BE0000) | 0x40000345);
- req = (http_req *) malloc(sizeof(http_req));
- req->sentmsg = sendmsg;
- req->webmsg = event->data.message;
- req->webfile = strdup(webfile);
- req->sender = sender;
- LinkList_AddToTail(&requests, (linklist_header *) req);
- }
- return(TRUE);
- }
-
- static BOOL MenuWarn(event_pollblock *event, void *reference)
- {
-
- if (info_w == 0)
- {
- info_w = Window_Create("ProgInfo", 0);
- Event_Claim(event_CLOSE, info_w, event_ANY, Handler_CloseWindow, NULL);
- Icon_SetText(info_w, 4, VERSION);
- }
- Wimp_CreateSubMenu((menu_block *) info_w,
- event->data.message.data.menuwarn.openpos.x,
- event->data.message.data.menuwarn.openpos.y);
-
- return(TRUE);
- }
-
- static void MenuChoice(void *handle, int *hit)
- {
- switch(hit[0])
- {
- case 0:
- if (info_w == 0)
- {
- info_w = Window_Create("ProgInfo", 0);
- Icon_SetText(info_w, 4, VERSION);
- Event_Claim(event_CLOSE, info_w, event_ANY, Handler_CloseWindow, NULL);
- }
- Window_Show(info_w, open_UNDERPOINTER);
- break;
-
- case 1:
- quit = TRUE;
- break;
- }
- }
-
- int main()
- {
- icon_handle baricon;
- char appname[64];
-
- Resource_Initialise("HTTP"); /* resources in <HTTP$Dir> */
-
- Msgs_LoadFile("messages");
- Msgs_Lookup("app.name:HTTP", appname, 64);
-
- Event_Initialise(appname);
- EventMsg_Initialise();
-
- Screen_CacheModeInfo();
- EventMsg_Claim(message_MODECHANGE, event_ANY, Handler_ModeChange, NULL);
-
- baricon = Icon_BarIcon("!http", iconbar_RIGHT);
- mainmenu = Menu_New("HTTP", ">Info|Quit");
- Menu_AttachMenu(mainmenu, window_ICONBAR, baricon, MenuChoice, NULL);
- EventMsg_Claim(message_MENUWARNING, event_ANY, MenuWarn, NULL);
-
- Event_Claim(event_REDRAW, event_ANY, event_ANY, Handler_NullRedraw, NULL);
- Event_Claim(event_OPEN, event_ANY, event_ANY, Handler_OpenWindow, NULL);
-
- Template_Initialise();
- Template_UseOutlineFonts();
- Template_LoadFile("Templates");
-
- Window_AutoHelp(event_ANY, event_ANY);
-
- EventMsg_Claim(message_ARCWEBFETCH, event_ANY, FetchRequest, NULL);
- EventMsg_Claim(0x823F1, event_ANY, HTTP_Rx, NULL);
-
- while (!quit)
- Event_Poll();
-
- Template_ClearAll();
-
- return(0);
- }
-