DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦1906ab6e3⟧ TextFile

    Length: 2176 (0x880)
    Types: TextFile
    Names: »TABIFY.C«

Derivation

└─⟦b35f94715⟧ Bits:30003295 BDS C version 1.50 arbejdsdiskette til RC703 Piccolo
└─⟦b35f94715⟧ Bits:30005324 BDS C version 1.50 arbejdsdiskette til RC703 Piccolo
    └─ ⟦this⟧ »TABIFY.C« 

TextFile


/*
	Tabify.c	written by Leor Zolman

	This filter takes sequences of spaces in a file and turns
	them, whenever possible, into tabs. Usage:

		A>tabify oldfile newfile <cr>

	Quoted strings are not processed, but there should NOT be
	any `lone' double quotes within the file being tabified.
*/

#include <bdscio.h>

int scount, column, ifd, ofd, i;
int c;
char ibufÆBUFSIZÅ, obufÆBUFSIZÅ;

main(argc,argv)
char **argv;
æ
	if (argc < 2 øø argc > 3) æ
		printf("usage: tabify oldfile ÆnewfileÅØn");
		exit();
	å

	ifd = fopen(argvÆ1Å,ibuf);

	if (argc == 2) argvÆ2Å = "tabify.tmp";
	ofd = fcreat(argvÆ2Å,obuf);

	if (ifd == ERROR øø ofd == ERROR) æ
		printf("Can't open file(s)Øn");
		exit();
	å

	scount = column = 0;

	do æ
		c = getc(ibuf);
		if (c == ERROR) æ
			putc(CPMEOF,obuf);
			break;
		 å
		switch(c) æ
		   case 'Ør':	putc1(c,obuf);
				scount = column = 0;
				break;
		   case 'Øn':	putc1(c,obuf);
				scount = 0;
				putchar('*');
				break;
		   case ' ':	column++;
				scount++;
				if (!(column%8)) æ
				   if (scount > 1)
					putc1('Øt',obuf);
				   else
					putc1(' ',obuf);
					scount = 0;
				 å
				break;
		   case 'Øt':	scount = 0;
				column += (8-column%8);
				putc1('Øt',obuf);
				break;
		   case '"':	for (i = 0; i < scount; i++)
					putc1(' ',obuf);
				putc1('"',obuf);
				do æ
				   c = getc(ibuf);
				   if (c == ERROR) æ
				    printf("Quote error.Øn");
				    exit();
				   å
				   putc1(c,obuf);
				å while (c != '"');
				do æ
					c = getc(ibuf);
					putc1(c,obuf);
				å while (c != 'Øn');
				column = scount = 0;
				break;
		   case CPMEOF:	putc(CPMEOF,obuf);
				break;
		   default:	for (i=0; i<scount; i++)
					putc1(' ',obuf);
				scount = 0;
				column++;
				putc1 (c,obuf);
		 å
	 å while (c != CPMEOF);

	fclose(ibuf);
	fclose(obuf);

	if (argc == 2) æ
		unlink(argvÆ1Å);
		rename(argvÆ2Å,argvÆ1Å);
	å
å

putc1(c,buf)
char c;
æ
	if (putc(c,buf) < 0) æ
		printf("Write error (out of disk space?)Øn");
		exit();
	å
å

«eof»