home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / canada-remote-systems / cpower / asc2pet.c next >
Text File  |  2019-04-13  |  4KB  |  150 lines

  1. /*
  2.  *
  3.  *  A2P.C
  4.  *
  5.  *  ├ONVERT AN ASCII TEXT FILE TO PETSCII.
  6.  *  ╥EAD AS MUCH OF THE STANDARD INPUT INTO A MEMORY BUFFER,
  7.  *  THEN OUTPUT IT WITH TRANSLATION TO THE STANDARD OUTPUT.
  8.  *  ╥EPEAT UNTIL STANDARD INPUT GIVES AN ┼╧╞.
  9.  *  ├URRENTLY SET UP TO CONVERT TAB TO TWO SPACES,
  10.  *  IGNORE LINE FEEDS, CONVERT BACKSPACE (CODE 8) AND DELETE
  11.  *  (CODE 127) TO PETSCII DELETE (CODE 20).
  12.  *  ┴LSO, TRANSLATE ├ CHARACTERS TO THOSE REQUIRED BY ├╨OWER├.
  13.  *  
  14.  *  ┴UTHOR: ─AVID ╬ETO
  15.  *  ─ATE  : ─ECEMBER 8, 1988
  16.  *  
  17.  */
  18.  
  19. #INCLUDE "STDIO.H"
  20.  
  21.  
  22. #DEFINE ╬╒╠ "\000"  /* REMEMBER THESE CODES ARE IN OCTAL */
  23. #DEFINE ╙╧╚ "\001"  
  24. #DEFINE ╙╘╪ "\002"  
  25. #DEFINE ┼╘╪ "\003"  
  26. #DEFINE ┼╧╘ "\004"  
  27. #DEFINE ┼╬╤ "\005"  
  28. #DEFINE ┴├╦ "\006"  
  29. #DEFINE ┬┼╠ "\007"  
  30. #DEFINE ┬╙  "\024"   /* CHANGE BACKSPACE TO DELETE */
  31. #DEFINE ╘┴┬ "  "     /* CHANGE TABS TO TWO SPACES */
  32. #DEFINE ╠╞  "\000"   /* IGNORE LINEFEEDS */
  33. #DEFINE ╓╘  "\013"  
  34. #DEFINE ╞╞  "\014"  
  35. #DEFINE ├╥  "\015"  
  36. #DEFINE ╙╧  "\016"  
  37. #DEFINE ╙╔  "\017"  
  38. #DEFINE ─╠┼ "\020"  
  39. #DEFINE ─├1 "\021"  
  40. #DEFINE ─├2 "\022"  
  41. #DEFINE ─├3 "\023"  
  42. #DEFINE ─├4 "\024"  
  43. #DEFINE ╬┴╦ "\025"  
  44. #DEFINE ╙┘╬ "\026"  
  45. #DEFINE ┼╘┬ "\027"  
  46. #DEFINE ├┴╬ "\030"  
  47. #DEFINE ┼═  "\031"  
  48. #DEFINE ╙╒┬ "\000"  /* IGNORE CTRL-Z */
  49. #DEFINE ┼╙├ "\033"  
  50. #DEFINE ╞╙  "\034"  
  51. #DEFINE ╟╙  "\035"  
  52. #DEFINE ╥╙  "\036"  
  53. #DEFINE ╒╙  "\037"  
  54.  
  55. #DEFINE ─┼╠ "\024"  
  56.  
  57.  
  58. STATIC CHAR *A2P [] = 
  59.           █  ╬╒╠,╙╧╚,╙╘╪,┼╘╪,┼╧╘,┼╬╤,┴├╦,┬┼╠,
  60. /* 0X08 */   ┬╙ ,╘┴┬,╠╞ ,╓╘ ,╞╞ ,├╥ ,╙╧ ,╙╔ ,
  61. /* 0X10 */   ─╠┼,─├1,─├2,─├3,─├4,╬┴╦,╙┘╬,┼╘┬,
  62. /* 0X18 */   ├┴╬,┼═ ,╙╒┬,┼╙├,╞╙ ,╟╙ ,╥╙ ,╒╙ , 
  63. /* 0X20 */   " ","!","\"","#","$","%","&","'",
  64. /* 0X28 */   "(",")","*","+",",","-",".","/",
  65. /* 0X30 */   "0","1","2","3","4","5","6","7",
  66. /* 0X38 */   "8","9",":",";","<","=",">","?",
  67. /* 0X40 */   "@","┴","┬","├","─","┼","╞","╟",
  68. /* 0X48 */   "╚","╔","╩","╦","╠","═","╬","╧",
  69. /* 0X50 */   "╨","╤","╥","╙","╘","╒","╓","╫",
  70. /* 0X58 */   "╪","┘","┌","[","\\","]","^","ñ",
  71. /* 0X60 */   "'","A","B","C","D","E","F","G",
  72. /* 0X68 */   "H","I","J","K","L","M","N","O",
  73. /* 0X70 */   "P","Q","R","S","T","U","V","W",
  74. /* 0X78 */   "X","Y","Z","█","▀","▌","»",─┼╠,
  75. /* 0X80 */   "C","U","E","A","A","A","A","C",   /* ACCENTED CHARS */
  76. /* 0X88 */   "E","E","E","I","I","I","┴","┴",   
  77. /* 0X90 */   "┼","AE","┴┼","O","O","O","U","U",
  78. /* 0X98 */   "Y","╧","╒","C","╠","┘","╥","F",
  79. /* 0XA0 */   "A","I","O","U","N","╬","","",
  80. /* 0XA8 */   "?","░","«","1/2","1/4","▀","<<",">>",
  81. /* 0XB0 */   "ª","ª","ª","▌","│","│","│","«",   /* 0XB3 IS A VERTICAL LINE */
  82. /* 0XB8 */   "«","│","▌","«","╜","╜","╜","«",
  83. /* 0XC0 */   "¡","▒","▓","½","└","█","½","½",
  84. /* 0XC8 */   "¡","░","▒","▓","½","└","█","▒",
  85. /* 0XD0 */   "▒","▓","▓","¡","¡","░","░","█",
  86. /* 0XD8 */   "█","╜","░","\022 \222","ó","í","\022í\222","\022ó\222",
  87. /* 0XE0 */   "ALPHA","BETA","╟AMMA","╨I","╙IGMA","SIGMA","MU","GAMMA",
  88. /* 0XE8 */   "╨HI","╘HETA","╧MEGA","DELTA","PHI","PHI","EPSILON","INTERSECT",
  89. /* 0XF0 */   "IS EQUIVALENT TO","+/-",">=","<=","","","/","",
  90. /* 0XF8 */   "","","","","","","╝",""
  91.           ▌;
  92.  
  93. #DEFINE ATOP(C) ( A2P[ (C) & 255 ] )
  94. /* TRANSLATE FROM TRUE ┴SCII ╘╧ ╨ETSCII */
  95.  
  96. CHAR *MALLOC();
  97. TYPEDEF INT VOID;
  98.  
  99.  
  100. MAIN()
  101.   INT CH;                       /* INPUT CHARACTER */
  102.   AUTO CHAR *STARTMEM, *ENDMEM; /* START AND END OF TEXT SPACE */
  103.   CHAR *ENDTEXT;                /* POINT TO ADDRESS AFTER LAST CHAR */
  104.   INT INPUT;                    /* INPUT STATE ┼╧╞ OR NOT ┼╧╞ */
  105.   CHAR *P;
  106.  
  107.   MOSTñALLOC( &STARTMEM, &ENDMEM );
  108.  
  109.   FOR ( INPUT = ┼╧╞+1; INPUT != ┼╧╞ ;)
  110.   █
  111.     
  112.     /* GET NEXT CHUNK OF INPUT FILE INTO MEMORY */
  113.     FOR ( ENDTEXT = STARTMEM ; (CH=GETCHAR())!=┼╧╞ && ENDTEXT < ENDMEM; )
  114.       *ENDTEXT++ = CH;
  115.     INPUT = CH;
  116.  
  117.     /* OUTPUT WITH CONVERSION */
  118.     FOR ( P = STARTMEM; P < ENDTEXT ; P++ )
  119.       FPUTS( ATOP(*P), STDOUT );
  120.   ▌
  121.   QUIT(STARTMEM);
  122. ▌    
  123.  
  124.  
  125. /* ALLOCATE A LARGE CHUNK OF MEMORY */
  126. /* (A MULTIPLE OF 254 BYTES TO MATCH DISK BLOCK SIZE) */
  127. VOID MOSTñALLOC( FIRSTBYTE, LASTBYTE )
  128. CHAR **FIRSTBYTE, **LASTBYTE;
  129.   UNSIGNED SIZE;
  130.   CHAR *P;
  131.  
  132.   FOR( SIZE = 185*254; (P = MALLOC(SIZE))==0; SIZE -= 0X3F8 ) /* 0X3F8=4*254 */
  133.     ;
  134.   FREE(P);  P = MALLOC( SIZE -= 0X3F8 ); /* LEAVE AN EXTRA 1K */
  135.  
  136.   *FIRSTBYTE = P;
  137.   *LASTBYTE  = ((UNSIGNED) P) + SIZE-1; /* IMPLICITLY CAST TO (CHAR *) */
  138.  
  139.   HIGHMEM(P);
  140.  
  141.  
  142. VOID QUIT(STARTMEM)
  143. CHAR *STARTMEM;
  144.   HIGHMEM( 0XD000 );
  145.   FREE( STARTMEM );