void CMailMessage::FormatMessage() { start_header(); prepare_header(); end_header(); prepare_body(); }
int eio_open(std::string fname, std::ifstream & in) { int target_big_endian = (endian_host_byte_order() == endian_big); in.open(fname.c_str()); if(!in.is_open()) { fatal("unable to open EIO file `%s'", fname.c_str()); } std::string format_header("/* file_format: 2, file_version: 3, big_endian: 0 */"); std::string format_header_4("/* file_format: 2, file_version: 4, big_endian: 0 */"); std::string start_header("/* ** start checkpoint @ -1... */"); std::string buf; getline(in,buf); buf += '\n'; if(buf!=EIO_FILE_HEADER) { std::cerr << "Failed reading EIO file header, read: " << buf << std::endl; std::cerr << "Should have read: " << EIO_FILE_HEADER << std::endl; exit(-1); } getline(in,buf); getline(in,buf); if(buf!=format_header && buf!=format_header_4) { std::cerr << "Failed reading format header, read: " << buf << std::endl; std::cerr << "Should have read: " << format_header << std::endl; std::cerr << "or: " << format_header_4 << std::endl; exit(-1); } int file_format, file_version, big_endian; char c_buf; in >> c_buf >> file_format >> c_buf >> file_version >> c_buf >> big_endian; getline(in,buf); if(!in.good()) { fatal("could not read EIO file header"); } getline(in,buf); getline(in,buf); if(buf!=start_header) { std::cerr << "Failed reading start header, read: " << buf << std::endl; std::cerr << "Should have read: " << start_header << std::endl; exit(-1); } getline(in,buf); if(file_format != MD_EIO_FILE_FORMAT) { fatal("EIO file `%s' has incompatible format", fname.c_str()); } if((file_version != EIO_FILE_VERSION) && (file_version != EIO_FILE_VERSION_NEW)) { fatal("EIO file `%s' has incompatible version", fname.c_str()); } if(!!big_endian != !!target_big_endian) { warn("endian of `%s' does not match host", fname.c_str()); warn("running with experimental cross-endian execution support"); warn("****************************************"); warn("**>> please check results carefully <<**"); warn("****************************************"); } return file_version; }
int do_article() { register char *s; ART_POS artsize; /* size in bytes of article */ bool hide_this_line = FALSE; /* hidden header line? */ ART_LINE linenum; /* line # on page, 1 origin */ #ifdef ULSMARTS bool under_lining = FALSE; /* are we underlining a word? */ #endif register char *bufptr = art_buf; /* pointer to input buffer */ register int outpos; /* column position of output */ static char prompt_buf[64]; /* place to hold prompt */ bool notesfiles = FALSE; /* might there be notesfiles junk? */ char oldmode = mode; #ifdef INNERSEARCH register int outputok; #endif if (fstat(artfp->_file,&filestat)) /* get article file stats */ return DA_CLEAN; if (filestat.st_mode & S_IFMT != S_IFREG) return DA_NORM; artsize = filestat.st_size; /* from that get article size */ sprintf(prompt_buf, "%%sEnd of article %ld (of %ld)--what next? [%%s]", (long)art,(long)lastart); /* format prompt string */ prompt = prompt_buf; int_count = 0; /* interrupt count is 0 */ firstpage = (topline < 0); for (;;) { /* for each page */ assert(art == openart); if (do_fseek) { #ifdef ASYNC_PARSE parse_maybe(art); /* make sure header is ours */ #endif artpos = vrdary(artline); if (artpos < 0) artpos = -artpos; /* labs(), anyone? */ if (firstpage) artpos = (ART_POS)0; fseek(artfp,artpos,0); if (artpos < htype[PAST_HEADER].ht_minpos) in_header = SOME_LINE; do_fseek = FALSE; restart = Nullch; } if (firstpage) { if (firstline) { interp(art_buf, (sizeof art_buf), firstline); #ifdef CLEAREOL maybe_eol(); /* PWP */ #endif CLEAREOL fputs(art_buf,stdout) FLUSH; artopen(art); /* rewind article in case interp */ /* forced a header parse */ } else { ART_NUM i; #ifdef CLEAREOL maybe_eol(); /* PWP */ #endif CLEAREOL printf("Article %ld",(long)art); i = (((ART_NUM)toread[ng]) - 1 + was_read(art)); #ifdef DELAYMARK if (i || dmcount) { printf(" (%ld more",(long)i); if (dmcount) printf(" + %ld Marked to return)",(long)dmcount); putchar(')'); } #else if (i) printf(" (%ld more)",(long)i); #endif if (htype[NGS_LINE].ht_flags & HT_HIDE) printf(" in %s", ngname); fputs(":\n",stdout) FLUSH; } start_header(art); forcelast = FALSE; /* we will have our day in court */ restart = Nullch; artline = 0; /* start counting lines */ artpos = 0; vwtary(artline,artpos); /* remember pos in file */ } for (linenum=(firstpage?2:1); in_header || ( #ifdef INNERSEARCH innersearch ? innermore() : #endif linenum<(firstpage?initlines:(special?slines:LINES)) ); linenum++) { /* for each line on page */ if (int_count) { /* exit via interrupt? */ putchar('\n') FLUSH; /* get to left margin */ int_count = 0; /* reset interrupt count */ mode = oldmode; return DA_NORM; /* skip out of loops */ } if (restart) { /* did not finish last line? */ bufptr = restart; /* then start again here */ restart = Nullch; /* and reset the flag */ } else { /* not a restart */ if (fgets(art_buf,LBUFLEN,artfp)==Nullch) { /* if all done */ mode = oldmode; return DA_NORM; /* skip out of loops */ } bufptr = art_buf; /* so start at beginning */ art_buf[LBUFLEN-1] = '\0'; /* make sure string ends */ } blinebeg = bufptr; /* remember where we began */ alinebeg = artpos; /* both in buffer and file */ if (in_header && bufptr == art_buf) hide_this_line = parseline(art_buf,do_hiding,hide_this_line); else if (notesfiles && do_hiding && bufptr == art_buf && *art_buf == '#' && isupper(art_buf[1]) && art_buf[2] == ':' ) { fgets(art_buf,sizeof(art_buf),artfp); if (index(art_buf,'!') != Nullch) fgets(art_buf,sizeof(art_buf),artfp); htype[PAST_HEADER].ht_minpos = ftell(artfp); /* exclude notesfiles droppings */ hide_this_line = TRUE; /* and do not print either */ notesfiles = FALSE; } #ifdef CUSTOMLINES if (hideline && bufptr == art_buf && execute(&hide_compex,art_buf) ) hide_this_line = TRUE; #endif if (in_header && htype[in_header].ht_flags & HT_MAGIC) { if (in_header == NGS_LINE) { hide_this_line = (index(art_buf,',') == Nullch); } else if (in_header == EXPIR_LINE) { if (!(htype[EXPIR_LINE].ht_flags & HT_HIDE)) hide_this_line = (strlen(art_buf) < 10); } } if (in_header == SUBJ_LINE && htype[SUBJ_LINE].ht_flags & HT_MAGIC) { /* is this the subject? */ int length; length = strlen(art_buf)-1; artline++; art_buf[length] = '\0'; /* wipe out newline */ #ifdef NOFIREWORKS no_ulfire(); #endif notesfiles = (instr(&art_buf[length-10]," - (nf") != Nullch); if (oldsubject) { length += 7; fputs("(SAME) ",stdout); oldsubject = FALSE; } if (length+UG > COLS) { /* rarely true */ linenum++; vwtary(artline,vrdary(artline-1)+COLS); artline++; } s = art_buf + 8; *s++ = '\0'; /* make into 2 strings */ #ifdef CLEAREOL maybe_eol(); /* PWP */ #endif CLEAREOL fputs(art_buf,stdout) FLUSH; /* print up through : */ if (!UG) putchar(' '); underprint(s); /* print subject underlined */ putchar('\n') FLUSH; /* and finish the line */ } else if (hide_this_line && do_hiding) { /* do not print line? */ linenum--; /* compensate for linenum++ */ if (!in_header) hide_this_line = FALSE; } else { /* just a normal line */ if (highlight==artline) { /* this line to be highlit? */ if (marking == STANDOUT) { #ifdef NOFIREWORKS if (erase_screen) no_sofire(); #endif standout(); } else { #ifdef NOFIREWORKS if (erase_screen) no_ulfire(); #endif underline(); } if (*bufptr == '\n') putchar(' '); } #ifdef INNERSEARCH outputok = !hide_everything; /* get it into register, hopefully */ #endif #ifdef CLEAREOL #ifdef INNERSEARCH if (outputok) #endif maybe_eol(); /* PWP */ #endif CLEAREOL #ifdef CUSTOMLINES if (pagestop && bufptr == art_buf && execute(&page_compex,art_buf) ) linenum = 32700; #endif for (outpos = 0; outpos < COLS; ) { /* while line has room */ if (*bufptr >= ' ') { /* normal char? */ #ifdef ULSMARTS if (*bufptr == '_') { if (bufptr[1] == '\b') { if (!under_lining && highlight!=artline #ifdef INNERSEARCH && outputok #endif ) { under_lining++; if (UG) { if (bufptr != buf && bufptr[-1] == ' ') { outpos--; backspace(); } } underline(); } bufptr += 2; } } else { if (under_lining) { under_lining = 0; un_underline(); if (UG) { if (*bufptr == ' ') goto skip_put; outpos++; } } } #endif #ifdef INNERSEARCH if (outputok) #endif { #ifdef ROTATION if (rotate && !in_header && isalpha(*bufptr)) { if ((*bufptr & 31) <= 13) putchar(*bufptr+13); else putchar(*bufptr-13); } else #endif putchar(*bufptr); } if (*UC && ((highlight==artline && marking == 1) #ifdef ULSMARTS || under_lining #endif )) { backspace(); underchar(); } skip_put: bufptr++; outpos++; } else if (*bufptr == '\n' || !*bufptr) { /* newline? */ #ifdef ULSMARTS if (under_lining) { under_lining = 0; un_underline(); } #endif #ifdef DEBUGGING if (debug & DEB_INNERSRCH && outpos < COLS - 6) { standout(); printf("%4d",artline); un_standout(); } #endif #ifdef INNERSEARCH if (outputok) #endif putchar('\n') FLUSH; restart = 0; outpos = 1000; /* signal normal \n */ } else if (*bufptr == '\t') { /* tab? */ #ifdef INNERSEARCH if (outputok) #endif putchar(*bufptr); bufptr++; outpos += 8 - outpos % 8; } else if (*bufptr == '\f') { /* form feed? */ #ifdef INNERSEARCH if (outputok) #endif fputs("^L",stdout); if (bufptr == blinebeg && highlight != artline) linenum = 32700; /* how is that for a magic number? */ bufptr++; outpos += 2; } else { /* other control char */ #ifdef INNERSEARCH if (outputok) #endif { putchar('^'); if (highlight == artline && *UC && marking == 1) { backspace(); underchar(); putchar(*bufptr+64); backspace(); underchar(); } else putchar(*bufptr+64); } bufptr++; outpos += 2; } } /* end of column loop */ if (outpos < 1000) {/* did line overflow? */ restart = bufptr; /* restart here next time */ if (AM) { /* automatic margins on tty? */ if (!XN && *bufptr == '\n') /* need we simulate XN? */ restart = 0; /* skip the newline */ } else { /* cursor just hangs there */ #ifdef INNERSEARCH if (outputok) #endif putchar('\n') FLUSH; /* so move it down ourselves */ if (*bufptr == '\n') restart = 0; /* simulate XN if need be */ } #ifdef CLEAREOL /* #ifdef INNERSEARCH if (outputok) #endif maybe_eol(); */ /* PWP *//* comment this out for now until I am sure it is needed*/ #endif CLEAREOL } /* handle normal end of output line formalities */ if (highlight == artline) { /* were we highlighting line? */ if (marking == STANDOUT) un_standout(); else un_underline(); highlight = -1; /* no more we are */ } artline++; /* count the line just printed */ if (artline - LINES + 1 > topline) /* did we just scroll top line off? */ topline = artline - LINES + 1; /* then recompute top line # */ } /* determine actual position in file */ if (restart) /* stranded somewhere in the buffer? */ artpos += restart - blinebeg; /* just calculate position */ else /* no, ftell will do */ artpos = ftell(artfp); /* so do ftell */ vwtary(artline,artpos); /* remember pos in file */ } /* end of line loop */ #ifdef INNERSEARCH innersearch = 0; if (hide_everything) { hide_everything = FALSE; *buf = Ctl('l'); goto fake_command; } #endif if (linenum >= 32700)/* did last line have formfeed? */ vwtary(artline-1,-vrdary(artline-1)); /* remember by negating pos in file */ special = FALSE; /* end of page, so reset page length */ firstpage = FALSE; /* and say it is not 1st time thru */ /* extra loop bombout */ if (artpos == artsize) {/* did we just now reach EOF? */ mode = oldmode; return DA_NORM; /* avoid --MORE--(100%) */ } /* not done with this article, so pretend we are a pager */ reask_pager: unflush_output(); /* disable any ^O in effect */ standout(); /* enter standout mode */ printf("--MORE--(%ld%%)",(long)(artpos*100/artsize)); un_standout(); /* leave standout mode */ fflush(stdout); /* reinp_pager: /* unused, commented for lint */ eat_typeahead(); #ifdef DEBUGGING if (debug & DEB_CHECKPOINTING) { printf("(%d %d %d)",checkcount,linenum,artline); fflush(stdout); } #endif if (checkcount >= docheckwhen && linenum == LINES && (artline > 40 || checkcount >= docheckwhen+10) ) { /* while he is reading a whole page */ /* in an article he is interested in */ checkcount = 0; checkpoint_rc(); /* update .newsrc */ } collect_subjects(); /* loads subject cache until */ /* input is pending */ mode = 'p'; getcmd(buf); if (errno) { if (LINES < 100 && !int_count) *buf = '\f';/* on CONT fake up refresh */ else { *buf = 'q'; /* on INTR or paper just quit */ } } carriage_return(); #ifndef CLEAREOL erase_eol(); /* and erase the prompt */ #else if (erase_screen && can_home_clear) /* PWP was here */ clear_rest(); else erase_eol(); /* and erase the prompt */ #endif CLEAREOL fflush(stdout); fake_command: /* used by innersearch */ /* parse and process pager command */ switch (page_switch()) { case PS_ASK: /* reprompt "--MORE--..." */ goto reask_pager; case PS_RAISE: /* reparse on article level */ mode = oldmode; return DA_RAISE; case PS_TOEND: /* fast pager loop exit */ mode = oldmode; return DA_TOEND; case PS_NORM: /* display more article */ break; } } /* end of page loop */ }