// Char codes 배열에 000012010B 이런 값이 들어있씁니다.

// 이 값들을 int 배열에 넣고 싶은데 segmentaion 오류가 발생하네요

// 혹시 이유를 아시는분 있나요???



#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#define LINESIZE 80
#define TAG 1
#define PROGRAMNAME 6
#define ADDR 6
#define SIZE 6

#define LENGTH 2
#define CODES 60

#define LABELSIZE 9
#define OTHERS 60

int main(int argc, char *argv[]) {
 char cline[LINESIZE];
 char tag[TAG];
 char programname[PROGRAMNAME];
 char addr[ADDR];
 char size[SIZE];
 
 char length[LENGTH];
 char codes[CODES];

 char label[LABELSIZE];
 char others[OTHERS]; 

 char *cptr = NULL;
 FILE *rfd, *wfd;

 int ch_int[CODES];
 
 int i = 0;

 rfd=fopen(argv[1],"r");
 wfd=fopen(argv[2],"w");
 
 while(fgets(cline, LINESIZE, rfd) > 0) {
  cptr = cline;
  if(*cline == 'H') {
   strncpy(tag,cptr,TAG);
   programname[TAG]='\0';
   
   strncpy(programname,cptr+TAG,PROGRAMNAME);
   programname[PROGRAMNAME]='\0';
   
   cptr = cline+TAG+PROGRAMNAME;
   
   strncpy(addr,cptr,ADDR);
   addr[ADDR]='\0';
   
   cptr = cline+TAG+PROGRAMNAME+ADDR;
   
   strncpy(size,cptr,SIZE);
   size[SIZE]='\0';
   

   fprintf(wfd, "TAG : %s, PROGRAM NAME : %s, ADDR : %s, SIZE : %s", tag, programname, addr, size);
   if(size[strlen(size)-1] != '\n') {
    fprintf(wfd, "\n");
   }
  }
  else if(*cline == 'T') {
   
   strncpy(tag,cptr,TAG);
   programname[TAG]='\0';

   strncpy(addr,cptr,ADDR);
   addr[ADDR]='\0';
   
   cptr = cline+TAG+ADDR;
   
   strncpy(length,cptr,LENGTH);
   length[LENGTH] ='\0';
   
   cptr = cline+TAG+ADDR+LENGTH;

   strncpy(codes,cptr,CODES);
   codes[CODES] ='\0';
   
   cptr = cline+TAG+ADDR+LENGTH+CODES;

   fprintf(wfd,"TAG : %s, ADDR : %s, LENGTH : %s", tag, addr, length);
   
   while (codes != NULL)
   {
    ch_int[i] = codes[i];
    fprintf(wfd, "%d", ch_int[i++]);
   }

   
    
   if(size[strlen(size)-1] != '\n') {
    fprintf(wfd,"\n");
   }
  }
  else if(*cline == 'M' || *cline == 'E') {

   strncpy(tag,cptr,TAG);
   programname[TAG]='\0';

   strncpy(addr,cptr,ADDR);
   addr[ADDR]='\0';
   
   cptr = cline+TAG+ADDR;
   
   strncpy(length,cptr,LENGTH);
   length[LENGTH] ='\0';
   
   cptr = cline+TAG+ADDR+LENGTH;

   strncpy(codes,cptr,CODES);
   codes[CODES] ='\0';
   
   cptr = cline+TAG+ADDR+LENGTH+OTHERS;
   
   fprintf(wfd,"TAG : %s, ADDR : %s, LENGTH : %s, OTHERS : %s", tag, addr, length, codes);
   if(size[strlen(size)-1] != '\n') {
    fprintf(wfd,"\n");
   }
  }
  strcpy(tag, " " );
  strcpy(programname, " ");
  strcpy(addr, " ");
  strcpy(size, " ");
  strcpy(codes, " ");
 }
 fclose(rfd);
 fclose(wfd);
 return 0;
}