add linewrap option when encoding (76 columns)

This commit is contained in:
Eric 2025-05-27 01:32:09 +02:00
parent 6c7d699f1a
commit 0dba01d98e
4 changed files with 46 additions and 6 deletions

View file

@ -1,11 +1,12 @@
CFLAGS = -g -Wall -Wextra -Werror CFLAGS = -g -Wall -Wextra -Werror
objects = main.o input.o encode.o objects = main.o input.o output.o encode.o
b64 : $(objects) b64 : $(objects)
cc -o b64 $(objects) cc -o b64 $(objects)
main.o input.o : input.h main.o input.o : input.h
main.o output.o : output.h
main.o encode.o : encode.h main.o encode.o : encode.h
.PHONY : clean .PHONY : clean

15
main.c
View file

@ -1,6 +1,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "input.h" #include "input.h"
#include "output.h"
#include "encode.h" #include "encode.h"
#define OBUFSIZE 4 #define OBUFSIZE 4
@ -12,11 +13,12 @@ unsigned char sbuf[SBUFSIZE];
int int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
int c, n, dec, url, hlp; int c, n, l;
int dec, url, hlp, wrp;
char *prog = *argv; char *prog = *argv;
FILE *in, *out; FILE *in, *out;
dec = url = hlp = 0; dec = url = hlp = wrp = 0;
while (--argc > 0 && (*++argv)[0] == '-') while (--argc > 0 && (*++argv)[0] == '-')
while ((c = *++argv[0])) while ((c = *++argv[0]))
switch (c) { switch (c) {
@ -29,6 +31,9 @@ main(int argc, char *argv[])
case 'h': case 'h':
hlp = 1; hlp = 1;
break; break;
case 'w':
wrp = 1;
break;
default: default:
fprintf(stderr, "%s: illegal option %c\n", prog, c); fprintf(stderr, "%s: illegal option %c\n", prog, c);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
@ -52,9 +57,15 @@ main(int argc, char *argv[])
} }
} else { } else {
while ((n = getocts((argc >= 1) ? in : stdin, obuf, OBUFSIZE))) { while ((n = getocts((argc >= 1) ? in : stdin, obuf, OBUFSIZE))) {
if (wrp) {
n = encode(obuf, n, sbuf, url);
l = printw((argc == 2) ? out : stdout, sbuf, n);
} else {
encode(obuf, n, sbuf, url); encode(obuf, n, sbuf, url);
fprintf((argc == 2) ? out : stdout, "%s", sbuf); fprintf((argc == 2) ? out : stdout, "%s", sbuf);
} }
}
if (!wrp || l != '\n')
fprintf((argc == 2) ? out : stdout, "\n"); fprintf((argc == 2) ? out : stdout, "\n");
} }
if (in) if (in)

19
output.c Normal file
View file

@ -0,0 +1,19 @@
#include "output.h"
#define WRAPCOL 76
char
printw(FILE *fp, unsigned char *s, int slen)
{
static int col;
int c;
while (slen--) {
fputc((c = *s++), fp);
++col;
if (!(col %= WRAPCOL))
fputc((c = '\n'), fp);
}
return c;
}

9
output.h Normal file
View file

@ -0,0 +1,9 @@
#ifndef HEADER_OUTPUT
#define HEADER_OUTPUT
#include <stdio.h>
char
printw(FILE *fp, unsigned char *s, int slen);
#endif