/* * * A2P.C * * ÃONVERT AN ASCII TEXT FILE TO PETSCII. * ÒEAD AS MUCH OF THE STANDARD INPUT INTO A MEMORY BUFFER, * THEN OUTPUT IT WITH TRANSLATION TO THE STANDARD OUTPUT. * ÒEPEAT UNTIL STANDARD INPUT GIVES AN ÅÏÆ. * ÃURRENTLY SET UP TO CONVERT TAB TO TWO SPACES, * IGNORE LINE FEEDS, CONVERT BACKSPACE (CODE 8) AND DELETE * (CODE 127) TO PETSCII DELETE (CODE 20). * ÁLSO, TRANSLATE Ã CHARACTERS TO THOSE REQUIRED BY ÃÐOWERÃ. * * ÁUTHOR: ÄAVID ÎETO * ÄATE : ÄECEMBER 8, 1988 * */ #INCLUDE "STDIO.H" #DEFINE ÎÕÌ "\000" /* REMEMBER THESE CODES ARE IN OCTAL */ #DEFINE ÓÏÈ "\001" #DEFINE ÓÔØ "\002" #DEFINE ÅÔØ "\003" #DEFINE ÅÏÔ "\004" #DEFINE ÅÎÑ "\005" #DEFINE ÁÃË "\006" #DEFINE ÂÅÌ "\007" #DEFINE ÂÓ "\024" /* CHANGE BACKSPACE TO DELETE */ #DEFINE ÔÁÂ " " /* CHANGE TABS TO TWO SPACES */ #DEFINE ÌÆ "\000" /* IGNORE LINEFEEDS */ #DEFINE ÖÔ "\013" #DEFINE ÆÆ "\014" #DEFINE ÃÒ "\015" #DEFINE ÓÏ "\016" #DEFINE ÓÉ "\017" #DEFINE ÄÌÅ "\020" #DEFINE ÄÃ1 "\021" #DEFINE ÄÃ2 "\022" #DEFINE ÄÃ3 "\023" #DEFINE ÄÃ4 "\024" #DEFINE ÎÁË "\025" #DEFINE ÓÙÎ "\026" #DEFINE ÅÔÂ "\027" #DEFINE ÃÁÎ "\030" #DEFINE ÅÍ "\031" #DEFINE ÓÕÂ "\000" /* IGNORE CTRL-Z */ #DEFINE ÅÓÃ "\033" #DEFINE ÆÓ "\034" #DEFINE ÇÓ "\035" #DEFINE ÒÓ "\036" #DEFINE ÕÓ "\037" #DEFINE ÄÅÌ "\024" STATIC CHAR *A2P [] = Û ÎÕÌ,ÓÏÈ,ÓÔØ,ÅÔØ,ÅÏÔ,ÅÎÑ,ÁÃË,ÂÅÌ, /* 0X08 */ ÂÓ ,ÔÁÂ,ÌÆ ,ÖÔ ,ÆÆ ,ÃÒ ,ÓÏ ,ÓÉ , /* 0X10 */ ÄÌÅ,ÄÃ1,ÄÃ2,ÄÃ3,ÄÃ4,ÎÁË,ÓÙÎ,ÅÔÂ, /* 0X18 */ ÃÁÎ,ÅÍ ,ÓÕÂ,ÅÓÃ,ÆÓ ,ÇÓ ,ÒÓ ,ÕÓ , /* 0X20 */ " ","!","\"","#","$","%","&","'", /* 0X28 */ "(",")","*","+",",","-",".","/", /* 0X30 */ "0","1","2","3","4","5","6","7", /* 0X38 */ "8","9",":",";","<","=",">","?", /* 0X40 */ "@","Á","Â","Ã","Ä","Å","Æ","Ç", /* 0X48 */ "È","É","Ê","Ë","Ì","Í","Î","Ï", /* 0X50 */ "Ð","Ñ","Ò","Ó","Ô","Õ","Ö","×", /* 0X58 */ "Ø","Ù","Ú","[","\\","]","^","¤", /* 0X60 */ "'","A","B","C","D","E","F","G", /* 0X68 */ "H","I","J","K","L","M","N","O", /* 0X70 */ "P","Q","R","S","T","U","V","W", /* 0X78 */ "X","Y","Z","Û","ß","Ý","¯",ÄÅÌ, /* 0X80 */ "C","U","E","A","A","A","A","C", /* ACCENTED CHARS */ /* 0X88 */ "E","E","E","I","I","I","Á","Á", /* 0X90 */ "Å","AE","ÁÅ","O","O","O","U","U", /* 0X98 */ "Y","Ï","Õ","C","Ì","Ù","Ò","F", /* 0XA0 */ "A","I","O","U","N","Î","","", /* 0XA8 */ "?","°","®","1/2","1/4","ß","<<",">>", /* 0XB0 */ "¦","¦","¦","Ý","³","³","³","®", /* 0XB3 IS A VERTICAL LINE */ /* 0XB8 */ "®","³","Ý","®","½","½","½","®", /* 0XC0 */ "­","±","²","«","À","Û","«","«", /* 0XC8 */ "­","°","±","²","«","À","Û","±", /* 0XD0 */ "±","²","²","­","­","°","°","Û", /* 0XD8 */ "Û","½","°","\022 \222","¢","¡","\022¡\222","\022¢\222", /* 0XE0 */ "ALPHA","BETA","ÇAMMA","ÐI","ÓIGMA","SIGMA","MU","GAMMA", /* 0XE8 */ "ÐHI","ÔHETA","ÏMEGA","DELTA","PHI","PHI","EPSILON","INTERSECT", /* 0XF0 */ "IS EQUIVALENT TO","+/-",">=","<=","","","/","", /* 0XF8 */ "","","","","","","¼","" Ý; #DEFINE ATOP(C) ( A2P[ (C) & 255 ] ) /* TRANSLATE FROM TRUE ÁSCII ÔÏ ÐETSCII */ CHAR *MALLOC(); TYPEDEF INT VOID; MAIN() Û INT CH; /* INPUT CHARACTER */ AUTO CHAR *STARTMEM, *ENDMEM; /* START AND END OF TEXT SPACE */ CHAR *ENDTEXT; /* POINT TO ADDRESS AFTER LAST CHAR */ INT INPUT; /* INPUT STATE ÅÏÆ OR NOT ÅÏÆ */ CHAR *P; MOST¤ALLOC( &STARTMEM, &ENDMEM ); FOR ( INPUT = ÅÏÆ+1; INPUT != ÅÏÆ ;) Û /* GET NEXT CHUNK OF INPUT FILE INTO MEMORY */ FOR ( ENDTEXT = STARTMEM ; (CH=GETCHAR())!=ÅÏÆ && ENDTEXT < ENDMEM; ) *ENDTEXT++ = CH; INPUT = CH; /* OUTPUT WITH CONVERSION */ FOR ( P = STARTMEM; P < ENDTEXT ; P++ ) FPUTS( ATOP(*P), STDOUT ); Ý QUIT(STARTMEM); Ý /* ALLOCATE A LARGE CHUNK OF MEMORY */ /* (A MULTIPLE OF 254 BYTES TO MATCH DISK BLOCK SIZE) */ VOID MOST¤ALLOC( FIRSTBYTE, LASTBYTE ) CHAR **FIRSTBYTE, **LASTBYTE; Û UNSIGNED SIZE; CHAR *P; FOR( SIZE = 185*254; (P = MALLOC(SIZE))==0; SIZE -= 0X3F8 ) /* 0X3F8=4*254 */ ; FREE(P); P = MALLOC( SIZE -= 0X3F8 ); /* LEAVE AN EXTRA 1K */ *FIRSTBYTE = P; *LASTBYTE = ((UNSIGNED) P) + SIZE-1; /* IMPLICITLY CAST TO (CHAR *) */ HIGHMEM(P); Ý VOID QUIT(STARTMEM) CHAR *STARTMEM; Û HIGHMEM( 0XD000 ); FREE( STARTMEM ); Ý