/**************************************************************************** * name: mo_pull_er_over_virgin * purpose: Given a URL, pull 'er over in such a way that no format * handling takes place and the data gets dumped in the filename * of the calling routine's choice. * inputs: * - char *url: The URL to pull over. * - char *fnam: Filename in which to dump the received data. * returns: * mo_succeed on success; mo_fail otherwise. * remarks: * This routine is called when we know there's data out there we * want to get and we know we just want it dumped in a file, no * questions asked, by the WWW library. Appropriate global flags * are set to make this happen. * This must be made cleaner. ****************************************************************************/ mo_status mo_pull_er_over_virgin (char *url, char *fnam) { int rv; /* Force dump to file. */ force_dump_to_file = 1; force_dump_filename = fnam; if (saveFileName!=NULL) { free(saveFileName); } saveFileName=strdup(url); is_uncompressed=0; rv = HTLoadAbsolute (url); if (rv == 1) { force_dump_to_file = 0; return mo_succeed; } else if (rv == -1) { force_dump_to_file = 0; interrupted = 1; return mo_fail; } else { force_dump_to_file = 0; return mo_fail; } }
PUBLIC int LYNewsPost ARGS1(document *,newdoc) { char *newsgroups = strchr(newdoc->address,':')+1; char user_input[1024]; FILE *fd; char *tmptr; char c; /* user input */ char tmpfile[100]; char cmd[130]; DocAddress WWWDoc; term_message=FALSE; /* pop previous document off of stack and load into main memory */ pop(newdoc); WWWDoc.address = newdoc->address; WWWDoc.post_data = newdoc->post_data; WWWDoc.post_content_type = newdoc->post_content_type; if(!HTLoadAbsolute(&WWWDoc)) return(NOT_FOUND); clear(); move(2,0); tempname(tmpfile,NEW_FILE); if((fd = fopen(tmpfile,"w")) == NULL) { statusline("Unable to open temp file"); sleep(2); return(NORMAL); } addstr("You will be posting to:"); addstr("\n "); addstr(newsgroups); addch('\n'); /* Use ^C to cancel mailing of comment */ /* and don't let sigints exit lynx */ signal(SIGINT, terminate_message); term_message=FALSE; addstr("\n\n Please enter your mail address\n"); strcpy(user_input,"From: "); /* add the mail address if there is one */ if(personal_mail_address) strcat(user_input,personal_mail_address); if (LYgetstr(user_input, VISIBLE) < 0 || term_message) { statusline("News Post Cancelled!!!"); sleep(1); fclose(fd); /* close the temp file */ goto cleanup; } fprintf(fd,"%s\n",user_input); addstr("\n\n Please enter a subject line\n"); strcpy(user_input,"Subject: "); /* add the default subject */ tmptr = newdoc->title; while(isspace(*tmptr)) tmptr++; if(strncasecomp(tmptr, "Re:",3)) strcat(user_input, "Re: "); strcat(user_input, newdoc->title); if (LYgetstr(user_input, VISIBLE) < 0 || term_message) { statusline("News Post Cancelled!!!"); sleep(1); fclose(fd); /* close the temp file */ goto cleanup; } fprintf(fd,"%s\n",user_input); /* add Newsgroups: summary: and Keywords: */ fprintf(fd,"Newsgroups: %s\nSummary: \nKeywords: \n\n",newsgroups); if(!no_editor && editor && *editor != '\0') { /* ask if the user wants to include the original message */ statusline("Do you wish to inlude the original message? (y/n) "); c=0; while((c = toupper(LYgetch())) != 'Y' && c != 'N') ; /* null body */ if(toupper(c) == 'Y') /* the 1 will add the reply ">" in front of every line */ print_wwwfile_to_fd(fd,1); fclose(fd); /* spawn the users editor on the news file */ sprintf(user_input,"%s %s",editor,tmpfile); statusline("Spawning your selected editor to edit mail message"); stop_curses(); if(system(user_input)) { statusline("Error spawning editor, check your editor definition in the options menu"); sleep(1); } start_curses(); } else { addstr("\n\n Please enter your message below."); addstr("\n When you are done, press enter and put a single period (.)"); addstr("\n on a line and press enter again."); addstr("\n\n"); scrollok(stdscr,TRUE); refresh(); *user_input = '\0'; if (LYgetstr(user_input, VISIBLE) < 0 || term_message) { statusline("News Post Cancelled!!!"); sleep(1); fclose(fd); /* close the temp file */ goto cleanup; } while(!STREQ(user_input,".") && !term_message) { addch('\n'); fprintf(fd,"%s\n",user_input); *user_input = '\0'; if (LYgetstr(user_input, VISIBLE) < 0) { statusline("News Post Cancelled!!!"); sleep(1); fclose(fd); /* close the temp file */ goto cleanup; } } fprintf(fd,"\n"); fclose(fd); /* close the temp file */ scrollok(stdscr,FALSE); /* stop scrolling */ } statusline("Post this message? (y/n) "); while((c = toupper(LYgetch())) != 'Y' && c != 'N') ; /* null body */ clear(); /* clear the screen */ if(c == 'N') { goto cleanup; } sprintf(cmd,"%s %s",INEWS,tmpfile); stop_curses(); printf("Posting your message:\n\n%s\n\nPlease wait...", cmd); #ifndef VMS signal(SIGINT, SIG_IGN); #endif /* not VMS */ system(cmd); start_curses(); #ifdef VMS goto cleandown; #endif /* VMS */ /* come here to cleanup and exit */ cleanup: signal(SIGINT, cleanup_sig); cleandown: term_message = FALSE; scrollok(stdscr,FALSE); /* stop scrolling */ remove(tmpfile); return(NORMAL); }
/**************************************************************************** * name: doit (PRIVATE) * purpose: Given a URL, go fetch information. * inputs: * - char *url: The URL to fetch. * - char **texthead: Return pointer for the head of the allocated * text block (which may be different than the * return text intended for display). * returns: * The text intended for display (char *). ****************************************************************************/ static char *doit (char *url, char **texthead) { char *msg; int rv; extern char *use_this_url_instead; mo_window *win=current_win; /* Hmmmmmmm... */ if (HTMainText) { free (HTMainText); HTMainText = NULL; } /* Is it April? */ if (IconPix!=IconPixSmall) { /* We aren't small... */ if (strstr(url,"~mag/")) { int tmp=21; tmp_pix=IconPix; IconPix = IconPixTom; logo_count = 0; set_pref(ePIX_COUNT, (void *)&tmp); XmxApplyPixmapToLabelWidget(win->logo, IconPix[0]); } // SAM EASTER } XmxApplyPixmapToLabelWidget(win->logo, IconPix[0]); is_uncompressed=0; rv = HTLoadAbsolute (url); if (rv == 1) { char *txt = hack_htmlsrc (); if (HTMainText) *texthead = HTMainText->htmlSrcHead; else *texthead = NULL; return txt; } else if (rv == -1) { interrupted = 1; *texthead = NULL; return NULL; } /* ** Just because we errored out, doesn't mean there isn't markup to ** look at. For example, an FTP site that doesn't let a user in because ** the maximum number of users has been reached often has a message ** telling about other mirror sites. The failed FTP connection returns ** a message that is taken care of below. */ if (HTMainText) { char *txt = hack_htmlsrc(); *texthead = HTMainText->htmlSrcHead; if (cci_get){ if (txt) return txt; else /* take care of failed local access */ txt = strdup("<H1>ERROR</H1>"); } return txt; } /* Return proper error message if we experienced redirection. */ if (use_this_url_instead) url = use_this_url_instead; msg = (char *)malloc ((strlen (url) + 200) * sizeof (char)); sprintf (msg, "<H1>ERROR</H1> Requested document (URL %s) could not be accessed.<p>The information server either is not accessible or is refusing to serve the document to you.<p>", url); *texthead = msg; securityType=HTAA_UNKNOWN; return msg; }
int printfile(DocInfo *newdoc) { BOOLEAN Lpansi = FALSE; DocAddress WWWDoc; char *content_base = NULL; char *content_location = NULL; char *cp = NULL; char *link_info = NULL; char *sug_filename = NULL; int lines_in_file = 0; int pagelen = 0; int printer_number = 0; int type = 0; /* * Extract useful info from URL. */ StrAllocCopy(link_info, newdoc->address + 12); /* * Reload the file we want to print into memory. */ LYpop(newdoc); WWWDoc.address = newdoc->address; WWWDoc.post_data = newdoc->post_data; WWWDoc.post_content_type = newdoc->post_content_type; WWWDoc.bookmark = newdoc->bookmark; WWWDoc.isHEAD = newdoc->isHEAD; WWWDoc.safe = newdoc->safe; if (!HTLoadAbsolute(&WWWDoc)) return (NOT_FOUND); /* * If we have an explicit content-base, we may use it even if not in source * mode. - kw */ if (HText_getContentBase()) { StrAllocCopy(content_base, HText_getContentBase()); LYRemoveBlanks(content_base); if (isEmpty(content_base)) { FREE(content_base); } } /* * If document is source, load the content_base and content_location * strings. - FM */ if (HTisDocumentSource()) { if (HText_getContentLocation()) { StrAllocCopy(content_location, HText_getContentLocation()); LYRemoveBlanks(content_location); if (isEmpty(content_location)) { FREE(content_location); } } if (!content_base) { if ((content_location) && is_url(content_location)) { StrAllocCopy(content_base, content_location); } else { StrAllocCopy(content_base, newdoc->address); } } if (!content_location) { StrAllocCopy(content_location, newdoc->address); } } sug_filename = suggested_filename(newdoc); /* * Get the number of lines in the file. */ if ((cp = strstr(link_info, "lines=")) != NULL) { /* * Terminate prev string here. */ *cp = '\0'; /* * Number of characters in "lines=". */ cp += 6; lines_in_file = atoi(cp); } /* * Determine the type. */ if (strstr(link_info, "LOCAL_FILE")) { type = TO_FILE; } else if (strstr(link_info, "TO_SCREEN")) { type = TO_SCREEN; } else if (strstr(link_info, "LPANSI")) { Lpansi = TRUE; type = TO_SCREEN; } else if (strstr(link_info, "MAIL_FILE")) { type = MAIL; } else if (strstr(link_info, "PRINTER")) { type = PRINTER; if ((cp = strstr(link_info, "number=")) != NULL) { /* number of characters in "number=" */ cp += 7; printer_number = atoi(cp); } if ((cp = strstr(link_info, "pagelen=")) != NULL) { /* number of characters in "pagelen=" */ cp += 8; pagelen = atoi(cp); } else { /* default to 66 lines */ pagelen = 66; } } /* * Act on the request. - FM */ switch (type) { case TO_FILE: send_file_to_file(newdoc, content_base, sug_filename); break; case MAIL: send_file_to_mail(newdoc, content_base, content_location); break; case TO_SCREEN: if (confirm_by_pages(CONFIRM_LONG_SCREEN_PRINT, lines_in_file, LYlines)) send_file_to_screen(newdoc, content_base, Lpansi); break; case PRINTER: if (confirm_by_pages(CONFIRM_LONG_PAGE_PRINT, lines_in_file, pagelen)) send_file_to_printer(newdoc, content_base, sug_filename, printer_number); break; } /* end switch */ FREE(link_info); FREE(sug_filename); FREE(content_base); FREE(content_location); return (NORMAL); }