ctm_ed.c revision 2926
12926Sphk/*
22926Sphk * ----------------------------------------------------------------------------
32926Sphk * "THE BEER-WARE LICENSE" (Revision 42):
42926Sphk * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
52926Sphk * can do whatever you want with this stuff. If we meet some day, and you think
62926Sphk * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
72926Sphk * ----------------------------------------------------------------------------
82926Sphk *
92926Sphk * $Id$
102926Sphk *
112926Sphk */
122926Sphk
132926Sphk#include "ctm.h"
142926Sphk
152886Sphkint
162926Sphkctm_edit(u_char *script, int length, char *filein, char *fileout)
172886Sphk{
182926Sphk    u_char *ep, cmd;
192926Sphk    int ln, ln2, iln, ret=0, c;
202926Sphk    FILE *fi=0,*fo=0;
212886Sphk
222926Sphk    fi = fopen(filein,"r");
232926Sphk    if(!fi) {
242926Sphk	perror(filein);
252926Sphk	return 8;
262886Sphk    }
272926Sphk
282926Sphk    fo = fopen(fileout,"w");
292886Sphk    if(!fo) {
302926Sphk	perror(fileout);
312926Sphk	fclose(fi);
322926Sphk	return 4;
332886Sphk    }
342886Sphk    iln = 0;
352886Sphk    for(ep=script;ep < script+length;) {
362886Sphk	cmd = *ep++;
372926Sphk	if(cmd != 'a' && cmd != 'd') { ret = 1; goto bye; }
382886Sphk	ln = 0;
392886Sphk	while(isdigit(*ep)) {
402886Sphk	    ln *= 10;
412886Sphk	    ln += (*ep++ - '0');
422886Sphk	}
432926Sphk	if(*ep++ != ' ') { ret = 1; goto bye; }
442886Sphk	ln2 = 0;
452886Sphk	while(isdigit(*ep)) {
462886Sphk	    ln2 *= 10;
472886Sphk	    ln2 += (*ep++ - '0');
482886Sphk	}
492926Sphk	if(*ep++ != '\n') { ret = 1; goto bye; }
502886Sphk	while(iln < ln) {
512926Sphk	    c = getc(fi);
522886Sphk	    putc(c,fo);
532926Sphk	    if(c == '\n')
542886Sphk		iln++;
552886Sphk	}
562886Sphk	if(cmd == 'd') {
572886Sphk	    while(ln2) {
582926Sphk		c = getc(fi);
592926Sphk		if(c != '\n')
602886Sphk		    continue;
612886Sphk		iln++;
622886Sphk		ln2--;
632886Sphk	    }
642886Sphk	    continue;
652886Sphk	}
662886Sphk	if(cmd == 'a') {
672886Sphk	    while(ln2) {
682886Sphk		c = *ep++;
692886Sphk		putc(c,fo);
702926Sphk		if(c != '\n')
712886Sphk		    continue;
722886Sphk		ln2--;
732886Sphk	    }
742886Sphk	    continue;
752886Sphk	}
762926Sphk	ret = 1;
772926Sphk	goto bye;
782886Sphk    }
792886Sphk    while(1) {
802926Sphk	c = getc(fi);
812886Sphk	if(c == EOF) break;
822886Sphk	putc(c,fo);
832886Sphk    }
842886Sphk    fclose(fi);
852886Sphk    fclose(fo);
862926Sphk    return 0;
872926Sphkbye:
882926Sphk    if(fi) 	fclose(fi);
892926Sphk    if(fo) 	fclose(fo);
902926Sphk    return ret;
912886Sphk}
922926Sphk
93