home *** CD-ROM | disk | FTP | other *** search
- /*
- 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('*');
- }