Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
converti da ascii a edcdic e viceversa - CNVRTWBL.C

CNVRTWBL.C

Caricato da:
Scarica il programma completo

  1. /*******
  2. ** FILE               Cnvrtwbl.c
  3. **
  4. ** AUTHOR             g.rossini
  5. **
  6. ** COPYRIGHT          Elsag Sistemi
  7. **
  8. ** Operating system   c compiler
  9. **
  10. ** Description        conversione di Files da EBCDIC ad ASCII o viceversa
  11. **                    (usato per copia in ambiente win senza messaggi)
  12. **                     par 1     tablefile   (conversion table)
  13. **                     par 2     inputfile   (input file )
  14. **                     par 3     inputmode   (mode for fopen input file)
  15. **                     par 4     outputfile  (output file)
  16. **                     par 5     outputmode  (mode for fopen output file)
  17. */
  18.  
  19. #include        <stdio.h>
  20. #include        <stdlib.h>
  21. #include        <string.h>
  22. #include        <share.h>
  23.  
  24. #define         FAIL    (-1)
  25. //#define         NL      0x15           /* AS400 0x15 */
  26.  
  27. #define         NL      0x0A           /* PC lf    0x10 */
  28. // #define         BYTE    char           /* AS400 char */
  29. #define         BYTE    unsigned char           /* PC Dos */
  30.  
  31. /*******
  32.         Dichiarazione di dati
  33. *******/
  34.  
  35. /**     Tabella di conversione dati     **/
  36.  
  37. BYTE    x_conv[ 256];
  38.  
  39. char    *pgm;
  40.  
  41. FILE    *input;
  42. FILE    *output;
  43.  
  44. /**     Converte un carattere di input in base alla tabella x_conv.
  45. **/
  46.  
  47. BYTE           convert( c)
  48. BYTE   c;
  49. {
  50.                 return ( x_conv[c]);
  51. }
  52.  
  53.  
  54. /****   Help su come usare il programma
  55. ****/
  56.  
  57. void    Uso()
  58. {
  59. fprintf(stderr,"Uso: %s tablefile inputfile inputmode outputfile outputmode\n",
  60.                 pgm);
  61.         exit(4);
  62. }
  63.  
  64. void    from()
  65. {
  66.         int             c_in;
  67.         BYTE            c_out;
  68.  
  69.         while( (c_in  = fgetc( input)) != EOF)
  70.         {
  71.                 c_out = convert( (BYTE) c_in);
  72.                 fputc( (int) c_out, output);
  73.         }
  74. }
  75.  
  76. /***    Lettura di una linea da un file di dati.
  77.         Se una linea e' piu' lunga di 80 caratteri si interrompe
  78.         con FAIL.
  79. ***/
  80.  
  81. int     getline(fp, buf)
  82. FILE    *fp;
  83. char    buf[];
  84. {
  85.         int     c;
  86.         int     nc = 0;
  87.  
  88.         while ( (c = fgetc(fp)) != EOF ) {
  89.                 *buf++ = c;
  90.                 if (c == (int)NL) {
  91.                         *--buf = 0x00;
  92.                         return(nc);
  93.                 }
  94.                 nc++;
  95.                 if( nc > 80)
  96.                         return(FAIL);
  97.         }
  98.         return(FAIL);
  99. }
  100.  
  101. /***
  102.         Caricamento della tabella di conversione dati
  103. ***/
  104.  
  105. void    load_table( s)
  106. char    *s;
  107. {
  108.         FILE    *fp;
  109.         int     n = 0, ret;
  110.         int     nc;
  111.         char    buf[100];
  112.         unsigned long   c_val1, c_val2, c_val3, c_val4, c_val5, c_val6,
  113.                         c_val7, c_val8;
  114.  
  115.         //if ( ( fp = fopen( s, "r lrecl=80")) == NULL)
  116.         if ( ( fp = fopen( s, "rb")) == NULL)
  117.  
  118.         {
  119.                 perror("Errore open tabella di conversione");
  120.                 exit(3);
  121.         }
  122.  
  123.         while( ( nc = getline( fp, buf)) != FAIL)
  124.         {
  125.                 if( (nc) && ( *buf != 'œ') )
  126.                 {
  127.                         if((ret = sscanf(buf,
  128.                                 " 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x",
  129.                                         &c_val1, &c_val2, &c_val3, &c_val4,
  130.                                         &c_val5, &c_val6, &c_val7, &c_val8
  131.                                         )) == 8)
  132.                         {
  133.                                 x_conv[n++] = (BYTE) c_val1;
  134.                                 x_conv[n++] = (BYTE) c_val2;
  135.                                 x_conv[n++] = (BYTE) c_val3;
  136.                                 x_conv[n++] = (BYTE) c_val4;
  137.                                 x_conv[n++] = (BYTE) c_val5;
  138.                                 x_conv[n++] = (BYTE) c_val6;
  139.                                 x_conv[n++] = (BYTE) c_val7;
  140.                                 x_conv[n++] = (BYTE) c_val8;
  141.  
  142.                                 if( n >= sizeof(x_conv))
  143.                                         break;
  144.                         }
  145.                 }
  146.                 memset(buf, 0, sizeof(buf));
  147.         }
  148.  
  149.         fclose(fp);
  150.  
  151.         if( n != sizeof( x_conv))
  152.         {
  153.                 printf("Tabella di conversione incompleta!! Non converto!\n");
  154.                 exit(1);
  155.         }
  156.         // print table for check
  157.        // for (n=0;n<256;n++)
  158.        //  printf ("%X ", x_conv[n]);
  159.  
  160.  
  161. }
  162.  
  163. /******
  164. ******/
  165.  
  166. main( ac , av)
  167. int     ac;
  168. char    *av[];
  169.  
  170.  
  171.  
  172. {
  173.         pgm = av[0];
  174.  
  175.         if( ac != 6)
  176.                 Uso();
  177.  
  178.                                 /* "r"  */
  179.         //if ( ( input = fopen( av[2], av[3])) == NULL)
  180.  
  181.        //       modo = strlwr(av[3]);
  182.  
  183.          if ( ( input = _fsopen( av[2], strlwr(av[3]), SH_DENYNO )) == NULL)
  184.          {
  185.                 // perror( "Errore open input");
  186.                 exit(1);
  187.                 }
  188.  
  189.                                 /*      "w+b lrecl=1" */
  190.         //if ( ( output = fopen( av[4], av[5])) == NULL)
  191.  
  192.         if ( ( output = fopen( av[4], strlwr(av[5]))) == NULL)
  193.         {
  194.                 // perror( "Errore open output");
  195.                 exit(2);
  196.         }
  197.  
  198.         load_table( av[1]);
  199.         from();
  200.         fclose( input), fclose( output);
  201. }