Example #1
0
/* returns number of bytes read */
static Buff *read_text_file(Buff *text_buffer, const char *filename) {
	FILE *file;
	Buff *line = NULL;

	buff_free(text_buffer);
	file = fopen(filename, "r");
	if (file != NULL) {
		while (!feof(file)) {
			line = get_line(line, file);
			if(line == NULL){
				text_buffer = buff_add(text_buffer, "\r\n");
				continue;
			}

			/* translate for posting */
			if (line->data[0] == '.')
				text_buffer = buff_add(text_buffer, ".");

			text_buffer = buff_add(text_buffer, "%s", line->data);

			if(text_buffer->data[(text_buffer->length - 1)] == '\r')
				text_buffer = buff_add(text_buffer, "\n");
			else
				text_buffer = buff_add(text_buffer, "\r\n");
		}
		fclose(file);
	}
	return text_buffer;
}
Example #2
0
static Buff *make_subject(Buff *subject, newspost_data *data, int filenumber,
			 int number_of_files, const char *filename,
			 int partnumber, int number_of_parts,
			 const char *filestring) {
	char numbuf[32];
	int numsize;

	if (data->subject != NULL)
		subject = buff_create(subject, "%s - ", data->subject->data);
	else
		subject = buff_create(subject, "");
	if (data->filenumber == TRUE){
		sprintf(numbuf, "%i", number_of_files);
		numsize = strlen(numbuf);
		subject = buff_add(subject, "%s %0*i of %i: ", filestring,
				   numsize, filenumber, number_of_files);
	}
	sprintf(numbuf, "%i", number_of_parts);
	numsize = strlen(numbuf);
	subject = buff_add(subject, (data->yenc == TRUE) ? "\"%s\" yEnc (%0*i/%i)" :
		"%s (%0*i/%i)", n_basename(filename), numsize,
		partnumber, number_of_parts);
	return subject;
}
Example #3
0
/* Note: the given strings are modified in place */
static char *parse_epsf_special(EpsfBox *box, char **ret, 
    char *prefix, char *arg)
{
    static struct {
        char *name;
        int  has_arg;
        char *value;
    } keys[] = {
        {"llx", 1, "0"},
        {"lly", 1, "0"},
        {"urx", 1, "0"},
        {"ury", 1, "0"},
        {"rwi", 1, "0"},
        {"rhi", 1, "0"},
        {"hoffset", 1, "0"},
        {"voffset", 1, "0"},
        {"hsize", 1, "612"},
        {"vsize", 1, "792"},
        {"hscale", 1, "100"},
        {"vscale", 1, "100"},
        {"angle", 1, "0"},
        {"clip", 0, "0"}
    };
#define NKEYS    (sizeof(keys) / sizeof(keys[0]))
    char    *ptr;
    char    *filename;
    double    value[NKEYS];
    Uchar    present[NKEYS];
    Buffer    buffer;
    char    *name;
    int    i;
    double    originx;
    double    originy;
    double    hsize;
    double    vsize;
    double    hscale;
    double    vscale;
        
    /* this special has the form
     *   ["]file.ps["] [key=valye]*
     */
    
    /* scan the filename */
    while(*arg == ' ' || *arg == '\t')
        arg++;

    /* make a copy of the string */
    ptr = arg;

    if(*ptr == '"')
        for(name = ++ptr; *ptr && *ptr != '"'; ptr++);
    else
        for(name = ptr; *ptr && *ptr != ' ' && *ptr != '\t'; ptr++);
    if(ptr == name)
        return NULL;
    *ptr++ = 0;
    filename = name;

    /* reset values to defaults */
    for(i = 0; i < NKEYS; i++) {
        value[i] = atof(keys[i].value);
        present[i] = 0;
    }
    
    buff_init(&buffer);
    buff_add(&buffer, "@beginspecial ", 0);

    while(*ptr) {
        const char *keyname;
        char    *val;
        char    *p;

        while(*ptr == ' ' || *ptr == '\t')
            ptr++;
        keyname = ptr;
        
        /* get the whole key=value pair */
        for(; *ptr && *ptr != ' ' && *ptr != '\t'; ptr++);
        
        if(*ptr) *ptr++ = 0;
        /* now we shouldn't touch `ptr' anymore */
        
        /* now work on this pair */
        p = strchr(keyname, '=');
        if(p == NULL)
            val = NULL;
        else {
            *p++ = 0;
            if(*p == '"') {
                val = ++p;
                /* skip until closing quote */
                while(*p && *p != '"')
                    p++;
                if(*p != '"')
                    mdvi_warning(
                    _("%s: malformed value for key `%s'\n"),
                        filename, keyname);
            } else
                val = p;
        }

        /* lookup the key */
        for(i = 0; i < NKEYS; i++)
            if(STRCEQ(keys[i].name, keyname))
                break;
        if(i == NKEYS) {
            mdvi_warning(_("%s: unknown key `%s' ignored\n"),
                     filename, keyname);
            continue;
        }
        if(keys[i].has_arg && val == NULL) {
            mdvi_warning(_("%s: no argument for key `%s', using defaults\n"),
                     filename, keyname);
            val = keys[i].value;
        } else if(!keys[i].has_arg && val) {
            mdvi_warning(_("%s: argument `%s' ignored for key `%s'\n"),
                     filename, val, keyname);
            val = NULL;
        }
        if(val)
            value[i] = atof(val);
        
        /* put the argument */
        buff_add(&buffer, val, 0);
        buff_add(&buffer, " @", 2);
        buff_add(&buffer, keyname, 0);
        buff_add(&buffer, " ", 1);
        
        /* remember that this option was given */
        present[i] = 0xff;
    }
    buff_add(&buffer, " @setspecial", 0);
    
    /* now compute the bounding box (code comes from dvips) */
    originx = 0;
    originy = 0;
    hscale = 1;
    vscale = 1;
    hsize = 0;
    vsize = 0;
    
    if(present[HSIZE])
        hsize = value[HSIZE];
    if(present[VSIZE])
        vsize = value[VSIZE];
    if(present[HOFF])
        originx = value[HOFF];
    if(present[VOFF])
        originy = value[VOFF];
    if(present[HSCALE])
        hscale = value[HSCALE] / 100.0;
    if(present[VSCALE])
        vscale = value[VSCALE] / 100.0;
    if(present[URX] && present[LLX])
        hsize = value[URX] - value[LLX];
    if(present[URY] && present[LLY])
        vsize = value[URY] - value[LLY];
    if(present[RWI] || present[RHI]) {
        if(present[RWI] && !present[RHI])
            hscale = vscale = value[RWI] / (10.0 * hsize);
        else if(present[RHI] && !present[RWI])
            hscale = vscale = value[RHI] / (10.0 * vsize);
        else {
            hscale = value[RWI] / (10.0 * hsize);
            vscale = value[RHI] / (10.0 * vsize);
        }
    }
    
    box->ox = originx;
    box->oy = originy;
    box->bw = hsize * hscale;
    box->bh = vsize * vscale;
    box->angle = value[ANGLE];

    *ret = buffer.data;
    
    return filename;
}