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