#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct s_errlog
{
char filename[50];
int errline;
int errcount;
} errlog;
typedef struct s_errnode
{
errlog * log;
struct s_errnode * next;
struct s_errnode * prev;
}errnode;
void dealerrlog(errnode * errlist,errnode * tail, char *filename,int errline)
{
errnode * ptempnode = errlist->next;
//printf("3\n");
while(ptempnode)
{
//printf("4\n");
errlog * ptemplog = ptempnode->log;
if(ptemplog!=NULL)
{
//printf("5 %s\n",ptemplog->filename);
if((strcmp(ptemplog->filename,filename)==0) && ptemplog->errline==errline)
{
ptemplog->errcount++;
return ;
}
}
ptempnode=ptempnode->next;
}
//printf("6\n");
int count = 0;
if(ptempnode==NULL)
{
ptempnode = errlist;
errnode * head = errlist->next;
while(ptempnode->next!=NULL)
{
ptempnode=ptempnode->next;
count++;
}
errnode * newnode = (errnode *)malloc(sizeof(errnode));
errlog * newlog = (errlog *)malloc(sizeof(errlog));
strcpy(newlog->filename,filename);
newlog->errline = errline;
newlog->errcount = 1;
newnode->log = newlog;
newnode->next = NULL;
ptempnode->next = newnode;
newnode->prev = ptempnode;
tail = newnode;
//printf("7 %s\n",filename);
//if(count>=8)
//{
// errnode * pdelnode = head->next;
// errlist->next = head->next;
// free(head->log);
// free(head);
// head=NULL;
//}
//printf("4 %s\n",filename);
return;
}
};
int main()
{
char inputfile[100]={0};
int inputline;
errnode * errlist= (errnode *)malloc(sizeof(errnode));
errlist->next = NULL;
errlist->log = NULL;
errlist->prev = NULL;
errnode * ptail = errlist;
while(scanf("%s %d",inputfile,&inputline)!=EOF)
{
//printf("inputfile = %s\n",inputfile);
char * p = strrchr(inputfile,'\\');
p++;
if(strlen(p)>16)
p += strlen(p)-16;
//printf("1-%s\n",p);
char filename[50]={0};
strcpy(filename,p);
//printf("1-%s dd",filename);
dealerrlog(errlist,ptail,filename,inputline);
}
errnode * pnexterrnode = errlist->next;
//errnode * ppreverrnode = ptail;
int count = 0;
while(pnexterrnode!=NULL)
{
//printf("aaa");
errlog * ptemplog = pnexterrnode->log;
if(ptemplog!=NULL)
{
// printf("%s %d %d\n",ptemplog->filename,ptemplog->errline,ptemplog->errcount);
count ++;
}
pnexterrnode = pnexterrnode->next;
}
if(count > 0)
{
errlog clog[count];
int i = 0;
pnexterrnode = errlist->next;
while(pnexterrnode!=NULL)
{
errlog * ptemplog = pnexterrnode->log;
if(ptemplog!=NULL)
{
//memset(clog[i].filename,0,50);
strcpy(clog[i].filename,ptemplog->filename);
//printf("%s \n",clog[i].filename,ptemplog->filename);
clog[i].errline = ptemplog->errline;
clog[i].errcount = ptemplog->errcount;
i++;
}
pnexterrnode = pnexterrnode->next;
}
int j = 0;
if(count>8)
j = count - 8;
for(;j<count;j++)
{
printf("%s %d %d\n",clog[j].filename,clog[j].errline,clog[j].errcount);
}
}
return 0;
}