home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
BDSC
/
BDSC-2
/
UNTIP.C
< prev
next >
Wrap
Text File
|
2000-06-30
|
2KB
|
94 lines
/*
UNTIP.C
written sometime in 1980 by Leor Zolman
This program takes a file of text that was accumulated during
a session on ITS where carriage-motion optimization was in effect,
meaning that there are "linefeed-backspace-backspace...text" sequences
all through it and it can't be edited using normal CP/M editors,
and turns it into normal text.
Usage:
A>untip sourcefile [destfile] <cr>
If only one name is given, a temp file is created and renamed at the
end to be the same as the source file (i.e., if something goes wrong,
you might lose the file...but probably not.)
*/
#include <bdscio.h>
#define TB 0x09
#define EOF 255
#define CR 0x0d
#define BS 0x08
#define LF 0x0a
char ibuf[BUFSIZ], obuf[BUFSIZ];
int col, maxcol;
int fd1, fd2;
char lbuf[132];
char c;
int i;
main(argc,argv)
char **argv;
{
if (argc < 2 || argc > 3) {
printf("usage: untip sourcefile [destfile] <cr>\n");
exit();
}
fd1 = fopen(argv[1],ibuf);
if (argc == 2) argv[2] = "untip.tmp";
fd2 = fcreat(argv[2],obuf);
if (fd1 == ERROR || fd2 == ERROR) {
printf("Open error.\n");
exit();
}
col = maxcol = 0;
while ((c=getc(ibuf)) != EOF && c != CPMEOF) {
if (col > maxcol) maxcol = col;
switch(c) {
case CR: col = 0;
continue;
case BS: col--;
continue;
case LF: putl(lbuf,obuf);
for (i=0; i<col; i++) lbuf[i] = ' ';
maxcol = col;
continue;
case TB: do { lbuf[col++] = ' ';
} while (col%8);
continue;
default: lbuf[col++] = c;
}
}
putl(lbuf,obuf);
putc(CPMEOF,obuf);
fflush(obuf);
fclose(ibuf);
fclose(obuf);
if (argc == 2) {
unlink(argv[1]);
rename(argv[2],argv[1]);
}
}
putl(line,obuf)
char *line, *obuf;
{
int i;
for (i = 0; i < maxcol; i++) {
putc(*line++,obuf);
}
putc(CR,obuf);
putc(LF,obuf);
putchar('*');
}