PXLTOASC 22-APR-1986 14:39:20 VAX C V2.1-007 Page 1 V1.0 24-JAN-1986 17:25:17 PXLTOASC.C;4 (1) 1 /* 2 * PXL to ASCII 3 * 4 * Ce programme lit un fichier PXL. Transcrit les rasters 5 * en matrices de points et sauve ces matrices sous forme ASCII dans 6 * un fichier. 7 * 8 * D'apres le programme FFC.WEB de DEC et MODPX.C. 9 * 10 * Version 1.0 - JNA - 24 Janvier 1985 11 */ 12 13 #include 71 #include 104 105 106 #define MAX_INPUT 128 /* Taille du buffer de commande */ 107 108 /* Buffer des caracteres */ 109 110 #define pxl_blocks 512 111 #define nb_blocks 512 112 113 #define pxl_buf_size (pxl_blocks*nb_blocks) 114 115 typedef char PXL_BUF_TYPE[pxl_buf_size]; 116 117 /* Buffer de travail des donnees */ 118 119 PXL_BUF_TYPE pxl_buf; 120 int pxl_len; 121 int dsize, mag; 122 123 /* Parametres des caracteres */ 124 125 int def_start, ras_start; 126 int x_offset, y_offset, tfm_width; 127 int row, column; 128 129 130 char visible[9]; 131 132 /* Fichiers de travail */ 133 134 FILE *pxl_file; /* Fichier PXL - En entree */ 135 FILE *asc_file; /* Fichier ASCII - En sortie */ 136 137 #define pxl_def_start(c) (pxl_len - 4*517 + 16*c) 138 139 main(argc,argv) 140 int argc; 141 char *argv[]; 142 { 143 1 register int i,n,l,b,k; 144 1 int nb_long_word,nb_byte; PXLTOASC 22-APR-1986 14:39:20 VAX C V2.1-007 Page 2 V1.0 24-JAN-1986 17:25:17 PXLTOASC.C;4 (1) 145 1 char *pxl_raster; 146 1 147 1 if (argc < 3) 148 1 { 149 2 printf("PXLTOASC file_name.pxl file_name.asc\n"); 150 2 exit(); 151 2 } 152 1 153 1 /* 154 1 * Lecture du fichier PXL 155 1 */ 156 1 157 1 if ((pxl_file = fopen(argv[1],"r","rfm=fix","mrs=512")) == NULL) 158 1 { 159 2 printf("Couldn't open file %s\n",argv[1]); 160 2 exit(); 161 2 } 162 1 163 1 /* 164 1 * Fichier de sortie 165 1 */ 166 1 167 1 if ((asc_file = fopen(argv[2],"w")) == NULL) 168 1 { 169 2 printf("Couldn't open file %s\n",argv[2]); 170 2 exit(); 171 2 } 172 1 173 1 /* 174 1 * Lecture du fichier PXL et controle 175 1 */ 176 1 177 1 pxl_len=0; 178 1 while ((pxl_len < pxl_buf_size) && 179 1 fread(&pxl_buf[pxl_len], pxl_blocks, 1, pxl_file) > 0) 180 1 pxl_len += pxl_blocks; 181 1 fclose(pxl_file); 182 1 183 1 184 1 if (pxl_len % 4 != 0) 185 1 { 186 2 printf("PXL file length not multiple of 4\n"); 187 2 printf(" PXL_LEN %d\n",pxl_len); 188 2 } 189 1 if (pxl_to_long(0) != 1001) 190 1 { 191 2 printf("Initial PXL format id wrong\n"); 192 2 printf("Theorique %d - Lu %d\n",1001,pxl_to_long(0)); 193 2 } 194 1 l = pxl_len-4; 195 1 while (l >= pxl_len-512) 196 1 { 197 2 if (pxl_to_long(l) == 1001) 198 2 { 199 3 pxl_len = l+4; 200 3 l = -1; 201 3 } PXLTOASC 22-APR-1986 14:39:20 VAX C V2.1-007 Page 3 V1.0 24-JAN-1986 17:25:17 PXLTOASC.C;4 (1) 202 2 else 203 2 l = l-4; 204 2 } 205 1 206 1 if (pxl_len < 16) 207 1 { 208 2 printf("PXL file too short\n"); 209 2 printf(" PXL_LEN %d\n",pxl_len); 210 2 } 211 1 212 1 if (pxl_to_long(pxl_len-4) != 1001) 213 1 { 214 2 printf("Final PXL format id wrong\n"); 215 2 printf("Theorique %d - Lu %d\n",1001,pxl_to_long(pxl_len-4)); 216 2 } 217 1 218 1 /* 219 1 * Transcription du fichier 220 1 */ 221 1 222 1 for (i=0; i<127; i++) 223 1 { 224 2 225 2 def_start = pxl_len - 4*517 + 16*i; 226 2 ras_start = 4*pxl_to_long(def_start+8); 227 2 if (ras_start <= 0) 228 2 continue; /* Caractere suivant */ 229 2 230 2 if (ras_start > pxl_len) 231 2 { 232 3 printf("For character %d Rasters out of file %d (%d)\n", 233 3 i,ras_start,pxl_len); 234 3 continue; 235 3 } 236 2 237 2 column = pxl_to_word(def_start); 238 2 row = pxl_to_word(def_start+2); 239 2 240 2 nb_long_word = column / 32; 241 2 if (nb_long_word*32 < column) 242 2 ++nb_long_word; 243 2 nb_byte = 4*nb_long_word; 244 2 245 2 pxl_raster = &pxl_buf[ras_start]; 246 2 fprintf(asc_file,"# %d\n",i); 247 2 for (l=0; l