tools/trim

67 lines
1.2 KiB
C
Executable file

#!/usr/bin/tcc -run
/* vim: set syn=c: */
#include <stdlib.h>
#include <stdio.h>
/*
* 0x09 - horizontal tab
* 0x0a - linefeed
* 0x0b - vertical tab
* 0x0c - form feed
* 0x0d - carriage return
* 0x20 - space
**/
int
main() {
char *linein = NULL, *lineout = NULL;
size_t len = 0, lastblankchar = 0;
ssize_t nread;
unsigned int trimmingleft = 1;
unsigned int i, j;
while ((nread = getline(&linein, &len, stdin)) > 0) {
trimmingleft = 1;
lastblankchar = j = 0;
lineout = malloc(nread+1);
for (i = 0; i < nread; ++i) {
if (trimmingleft) {
if(linein[i] != 0x09 &&
linein[i] != 0x0a &&
linein[i] != 0x0b &&
linein[i] != 0x0c &&
linein[i] != 0x0d &&
linein[i] != 0x20) {
trimmingleft = 0;
}
}
if (!trimmingleft){
if(linein[i] != 0x09 &&
linein[i] != 0x0a &&
linein[i] != 0x0b &&
linein[i] != 0x0c &&
linein[i] != 0x0d &&
linein[i] != 0x20) {
lastblankchar = j + 1;
}
}
if (!trimmingleft) {
lineout[j++] = linein[i];
}
}
lineout[lastblankchar] = '\n';
lineout[lastblankchar+1] = '\0';
printf("%s", lineout);
free(lineout);
}
return 0;
}