1*cf5a6c84SAndroid Build Coastguard Worker /* rev.c - reverse lines of a set of given input files 2*cf5a6c84SAndroid Build Coastguard Worker * 3*cf5a6c84SAndroid Build Coastguard Worker * Copyright 2012 Elie De Brauwer <[email protected]> 4*cf5a6c84SAndroid Build Coastguard Worker 5*cf5a6c84SAndroid Build Coastguard Worker USE_REV(NEWTOY(rev, NULL, TOYFLAG_USR|TOYFLAG_BIN)) 6*cf5a6c84SAndroid Build Coastguard Worker 7*cf5a6c84SAndroid Build Coastguard Worker config REV 8*cf5a6c84SAndroid Build Coastguard Worker bool "rev" 9*cf5a6c84SAndroid Build Coastguard Worker default y 10*cf5a6c84SAndroid Build Coastguard Worker help 11*cf5a6c84SAndroid Build Coastguard Worker usage: rev [FILE...] 12*cf5a6c84SAndroid Build Coastguard Worker 13*cf5a6c84SAndroid Build Coastguard Worker Output each line reversed, when no files are given stdin is used. 14*cf5a6c84SAndroid Build Coastguard Worker */ 15*cf5a6c84SAndroid Build Coastguard Worker 16*cf5a6c84SAndroid Build Coastguard Worker #include "toys.h" 17*cf5a6c84SAndroid Build Coastguard Worker rev_line(char ** pline,long len)18*cf5a6c84SAndroid Build Coastguard Workerstatic void rev_line(char **pline, long len) 19*cf5a6c84SAndroid Build Coastguard Worker { 20*cf5a6c84SAndroid Build Coastguard Worker char *line; 21*cf5a6c84SAndroid Build Coastguard Worker long i; 22*cf5a6c84SAndroid Build Coastguard Worker 23*cf5a6c84SAndroid Build Coastguard Worker if (!pline) return; 24*cf5a6c84SAndroid Build Coastguard Worker line = *pline; 25*cf5a6c84SAndroid Build Coastguard Worker if (len && line[len-1]=='\n') line[--len] = 0; 26*cf5a6c84SAndroid Build Coastguard Worker 27*cf5a6c84SAndroid Build Coastguard Worker if (len--) for (i = 0; i <= len/2; i++) { 28*cf5a6c84SAndroid Build Coastguard Worker char tmp = line[i]; 29*cf5a6c84SAndroid Build Coastguard Worker 30*cf5a6c84SAndroid Build Coastguard Worker line[i] = line[len-i]; 31*cf5a6c84SAndroid Build Coastguard Worker line[len-i] = tmp; 32*cf5a6c84SAndroid Build Coastguard Worker } 33*cf5a6c84SAndroid Build Coastguard Worker xputs(line); 34*cf5a6c84SAndroid Build Coastguard Worker } 35*cf5a6c84SAndroid Build Coastguard Worker rev_main(void)36*cf5a6c84SAndroid Build Coastguard Workervoid rev_main(void) 37*cf5a6c84SAndroid Build Coastguard Worker { 38*cf5a6c84SAndroid Build Coastguard Worker loopfiles_lines(toys.optargs, rev_line); 39*cf5a6c84SAndroid Build Coastguard Worker } 40