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

⟦78c326edd⟧ TextFile

    Length: 2048 (0x800)
    Types: TextFile
    Names: »CC0T.C«

Derivation

└─⟦23f778bf6⟧ Bits:30005378 BDS C v1.46 & Pascal/MT+ v5.5 (Callan format)
    └─ ⟦this⟧ »CC0T.C« 
└─⟦4ada80662⟧ Bits:30005446 Pascal/MT+ v5.5 & XREF & BDS C v1.46
    └─ ⟦this⟧ »CC0T.C« 
└─⟦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⟧ »CC0T.C« 

TextFile


/*
	CC0T.C -- TRS-80 C PREPROCESSOR
	WRITTEN BY LEOR ZOLMAN

	THIS PROGRAM TAKES, AS INPUT, A C SOURCE FILE WRITTEN
	USING THE SPECIAL "POUND SIGN" ENCODING FOR CHARACTERS
	WHICH ARE UNPRINTABLE (AND UNENTERABLE) ON THE EARLY
	MODEL TRS-80 COMPUTERS. WHEREVER CC0T FINDS A SEQUENCE
		#X
	IN THE INPUT FILE, WHERE "X" IS ONE OF THE SPECIAL
	CHARACTERS AS OUTLINED IN THE SOURCE FOR CONVERT.C,
	THEN THE TWO-CHARACTER SEQUENCE IS CONVERTED TO A
	SINGLE CHARACTER AS REQUIRED BY THE BDS C COMPILER.
	THE RESULTANT FILE MAY THEN BE COMPILED WITH CC1, CC2,
	ETC.

*/

#INCLUDE "BDSCIO.H"

#DEFINE POUND 0X23
#DEFINE LEFTBRACK 0X5B
#DEFINE BACKSLASH 0X5C
#DEFINE RIGHTBRACK 0X5D
#DEFINE CIRCUM 0X7E
#DEFINE VERTIBAR 0X7C
#DEFINE UNDERSCORE 0X5F
#DEFINE UPARROW 0X5E

CHAR IBUFÆBUFSIZÅ, OBUFÆBUFSIZÅ;

MAIN(ARGC,ARGV)
INT ARGC;
CHAR *ARGVÆÅ;
BEGIN
	INT FD1, FD2;
	CHAR C;
	IF (ARGC != 3) BEGIN
			PRINTF("USAGE: CC0T OLD NEW <CR>ØN");
			EXIT();
		       END
	FD1 = FOPEN(ARGVÆ1Å,IBUF);
	IF (FD1 == ERROR) BEGIN
			PRINTF("CANNOT OPEN INPUT FILE.ØN");
			EXIT();
		       END
	FD2 = FCREAT(ARGVÆ2Å,OBUF);
	IF (FD2 == ERROR) BEGIN
			PRINTF("CANNOT OPEN OUTPUT FILE.ØN");
			EXIT();
		       END
	WHILE ((( C = GETC(IBUF)) != CPMEOF) && C != 255)
	BEGIN
	  IF (C != POUND) PUTC2(C);
	  ELSE SWITCH(C = GETC(IBUF))
	   BEGIN
		CASE 'B': PUTC2(BACKSLASH);
			  BREAK;
		CASE 'L': PUTC2(LEFTBRACK);	
			  BREAK;	
		CASE 'R': PUTC2(RIGHTBRACK);
			  BREAK;
		CASE 'C': PUTC2(CIRCUM);	
			  BREAK;
		CASE 'V': PUTC2(VERTIBAR);
			  BREAK;
		CASE 'U': PUTC2(UNDERSCORE);
			  BREAK;
		CASE 'H': PUTC2(UPARROW);
			  BREAK;
		DEFAULT:  PUTC2(POUND);
			  PUTC2(C);
	    END
	END

	IF (C == 255) C = CPMEOF;
	PUTC2(C);
	FFLUSH(OBUF);
	FCLOSE(OBUF);
	FCLOSE(IBUF);
END


PUTC2(C)
CHAR C;
BEGIN
	IF (PUTC(C,OBUF) < 0) BEGIN
		PRINTF("OUTPUT WRITE ERROR (DISK FULL?)ØN");
		EXIT();
	END
END

«eof»