//プロジェクト名mail001 C++ソースファイルmail001.cpp リソーススクリプトmail001.rc ws2_32.lib #include #include #include #include #include #pragma comment(lib, "ws2_32.lib") extern "C" { __declspec(dllexport) int opensock(char * string01,int port01,int timeout); __declspec(dllexport) int sendjis(int sock,char * string01); __declspec(dllexport) int sendjis64(int sock,char * string01); __declspec(dllexport) unsigned long sendjisfile(int sock,char * string01, unsigned long length,int timeout); __declspec(dllexport) unsigned long sendsockfile64(int sock,char * string01, unsigned long length,int timeout); __declspec(dllexport) int recvsockoneline(int sock,char * string01); __declspec(dllexport) int recvjisheader(int sock,char * string01); __declspec(dllexport) int recvjisoneline(int sock,char * string01); __declspec(dllexport) int recvjisquoted(int sock,char * string01); __declspec(dllexport) int recvutfquoted(int sock,char * string01); __declspec(dllexport) int recvutfbase64(int sock,char * string01); __declspec(dllexport) int recvutf8bit(int sock,char * string01); __declspec(dllexport) int closesock(int sock); __declspec(dllexport) int openfile(char * string01); __declspec(dllexport) int savefile64(int fp01,char * string01); __declspec(dllexport) int closefile(int fp01); __declspec(dllexport) char * jis64_decode(char * string01,char * string02); __declspec(dllexport) char * subheader(char * string01,char * string02); __declspec(dllexport) char * subjisoneline(char * string01,char * string02); __declspec(dllexport) char * subjisquoted(char * string01,char * string02); __declspec(dllexport) char * subutfquoted(char * string01,char * string02); __declspec(dllexport) char * subutfbase64(char * string01,char * string02); __declspec(dllexport) char * subbase64(char * string01,char * string02); __declspec(dllexport) char * subutf8bit(char * string01,char * string02); __declspec(dllexport) char * qencode(char * string01,char * string02); __declspec(dllexport) char * qdecode(char * string01,char * string02); __declspec(dllexport) char * bencode(char * string01,char * string02); __declspec(dllexport) char * bdecode(char * string01,char * string02); __declspec(dllexport) char * shift2jis(char * string01,char * string02); __declspec(dllexport) char * jis2shift(char * string01,char * string02); __declspec(dllexport) char * shift2utf(char * string01,char * string02); __declspec(dllexport) char * utf2shift(char * string01,char * string02); int qpencode( unsigned int *n,char *data,char *into); int qpdecode(char * string01,char * string02); int base64(char *data,unsigned int size,char *into); int outchar(unsigned int *n,char **ptr,char c); int base64_decode(char* src, char* dst); char * shifttojis(char * string01,char * string04); char * jistoshift(char * string01,char * string04); char * shift_to_utf(char * string01,char * string02); char * utf_to_shift(char * string01,char * string02); char * jistoshifth(char * string01,char * string04); BOOL CALLBACK DlgProc(HWND hWnd ,UINT msg ,WPARAM wp,LPARAM lp); unsigned __stdcall thread01(void *arg); #define IDD_DIALOG1 101 #define IDC_FILE 1001 #define IDC_BYTE 1002 #define IDC_LENGTH 1003 #define IDC_PROGRESS1 1004 //#define PBM_SETBKCOLOR 0x2001 //#define PBM_SETBARCOLOR 0x409 static HWND hProg1; HWND hDlg; MSG msg; int flag02 = 1; int timeout01 = 60; BOOL CALLBACK DlgProc(HWND hWnd ,UINT msg ,WPARAM wp,LPARAM lp){ if((msg == WM_CLOSE) || (msg == WM_COMMAND)){ flag02 = 0; } return FALSE; } unsigned __stdcall thread01(void *arg) { HINSTANCE hInst = GetModuleHandle("mail001.dll"); hDlg=CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DlgProc);/*ダイアログ作成*/ ShowWindow( hDlg, SW_SHOW ); while (flag02 && (GetMessage(&msg, NULL, 0, 0))) { if (!IsDialogMessage(hDlg, &msg)){ TranslateMessage(&msg); DispatchMessage(&msg); } } DestroyWindow( hDlg ); return(0); } int opensock(char * string01,int port01,int timeout) { if (timeout>=30 && timeout<=300) timeout01 = timeout; else timeout01 = 60; WSADATA wsaData; struct sockaddr_in server; SOCKET sock; char *deststr; unsigned int **addrptr; deststr = string01; // if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0) { return(-1); } sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { return(-1); } server.sin_family = AF_INET; server.sin_port = htons(port01); server.sin_addr.S_un.S_addr = inet_addr(deststr); if (server.sin_addr.S_un.S_addr == 0xffffffff) { struct hostent *host; host = gethostbyname(deststr); if (host == NULL) { return(-1); } addrptr = (unsigned int **)host->h_addr_list; while (*addrptr != NULL) { server.sin_addr.S_un.S_addr = *(*addrptr); if (connect(sock,(struct sockaddr *)&server,sizeof(server)) == 0) { break; } addrptr++; } if (*addrptr == NULL) { return(-1); } } else { if (connect(sock,(struct sockaddr *)&server,sizeof(server)) != 0) { return(-1); } } return sock; } int sendjis(int sock,char * string01) { fd_set fds, readfds; struct timeval tv; unsigned int result; FD_ZERO(&readfds); FD_SET((unsigned)sock, &readfds); tv.tv_sec = timeout01; tv.tv_usec = 0; memcpy(&fds, &readfds, sizeof(fd_set)); result = select(sock+1, NULL, &fds, NULL, &tv); if (result <= 0) { return(-1); } char * string04; char * work; unsigned int i; string04=(char *)malloc(strlen(string01)*4+4); work = string04; for( i=0 ; in) { bar01=100*n/length; SendMessage(hProg1, PBM_SETPOS, bar01, 0); memcpy(&fds, &readfds, sizeof(fd_set)); result = select(sock+1, NULL, &fds, NULL, &tv); if (result <= 0) { break; } if((read_size = fread(buf,1, 150000, fp01)) > 0) { buf[read_size] = 0; work = string04; for( i=0 ; i<600001 ; i++ ) { * work = '0'; work++; } string04[600000]=0; shifttojis(buf,string04); send(sock, string04,strlen(string04), 0); n+=read_size; } else { break; } wsprintf(dlg_byte, "%8d", n); Static_SetText(GetDlgItem(hDlg, IDC_BYTE), dlg_byte); } _sleep(200); SendMessage(hDlg, WM_CLOSE, 0, 0); _sleep(400); fclose(fp01); free(buf); free(string04); CloseHandle( thread_id1 ); if (n < 0) { return(-1); } return(n); } unsigned long sendsockfile64(int sock,char * string01, unsigned long length,int timeout) { flag02 = 1; fd_set fds, readfds; struct timeval tv; unsigned int result; FD_ZERO(&readfds); FD_SET((unsigned)sock, &readfds); tv.tv_sec = timeout01; tv.tv_usec = 0; FILE * fp01; unsigned long read_size,n; char * buf = (char*)calloc(256 , sizeof(char)); char * string04=(char *)malloc(516); n=0; HANDLE thread_id1; unsigned dummy; char dlg_file[40], dlg_byte[20], dlg_length[40]; thread_id1 = (HANDLE)_beginthreadex( NULL, 0, &thread01, NULL, 0, &dummy ); wsprintf(dlg_file, "%s%s", string01,"をアップロードしています"); wsprintf(dlg_length, "/ %8d Byte", length); _sleep(200); SetWindowText(hDlg,"アップロード"); Static_SetText(GetDlgItem(hDlg, IDC_FILE), dlg_file); Static_SetText(GetDlgItem(hDlg, IDC_LENGTH), dlg_length); hProg1 = GetDlgItem(hDlg, IDC_PROGRESS1); SendMessage(hProg1, PBM_SETRANGE, 0, MAKELPARAM(0, 100)); SendMessage(hProg1, PBM_SETBKCOLOR, 0, (LPARAM)RGB(250, 250, 250)); SendMessage(hProg1, PBM_SETBARCOLOR, 0, (LPARAM)RGB(0, 255, 0)); if((fp01=fopen(string01,"rb"))==NULL) { return(-1); } int bar01=0; while(flag02 && length>n) { bar01=100*n/length; SendMessage(hProg1, PBM_SETPOS, bar01, 0); memcpy(&fds, &readfds, sizeof(fd_set)); result = select(sock+1, NULL, &fds, NULL, &tv); if (result <= 0) { break; } if((read_size = fread(buf,1, 228, fp01)) > 0) { base64(buf,read_size,string04); send(sock, string04,strlen(string04), 0); n+=read_size; } else { break; } wsprintf(dlg_byte, "%8d", n); Static_SetText(GetDlgItem(hDlg, IDC_BYTE), dlg_byte); } _sleep(200); SendMessage(hDlg, WM_CLOSE, 0, 0); _sleep(400); fclose(fp01); free(buf); free(string04); CloseHandle( thread_id1 ); if (n < 0) { return(-1); } return(n); } int recvsockoneline(int sock,char * string01) { fd_set fds, readfds; struct timeval tv; unsigned int result; FD_ZERO(&readfds); FD_SET((unsigned)sock, &readfds); tv.tv_sec = timeout01; tv.tv_usec = 0; char * buf; unsigned int len,size,pos,n; char c; size=0; buf=NULL; pos=0; while(1) { memcpy(&fds, &readfds, sizeof(fd_set)); result = select(sock+1, &fds, NULL, NULL, &tv); if (result <= 0) { break; } c='\0'; len=recv(sock,&c,1,0); if((len<=0) || (pos>4000)) { return(-1); } if(pos+1>=size) { size+=4096; if(buf==NULL) { buf=(char *)calloc(size,sizeof(char)); } else { buf=(char *)realloc(buf,size*sizeof(char)); } } buf[pos]=c; pos++; if(pos>=1&&buf[pos-1]=='\n') { if(pos>=2&&buf[pos-2]=='\r') { buf[pos-2]='\0'; pos-=2; break; } else{ buf[pos-1]='\0'; pos--; break; } } } len=strlen(string01); if(buf==NULL) { return(-1); } else { n=strlen(buf); if (len>=(n+1)) { memcpy(string01,buf,n+1); } else { pos=0; } } free(buf); return(pos); } int recvjisheader(int sock,char * string01) { fd_set fds, readfds; struct timeval tv; unsigned int result; FD_ZERO(&readfds); FD_SET((unsigned)sock, &readfds); tv.tv_sec = timeout01; tv.tv_usec = 0; char * buf; unsigned int len,size,pos,n; char c; size=0; buf=NULL; pos=0; while(1) { memcpy(&fds, &readfds, sizeof(fd_set)); result = select(sock+1, &fds, NULL, NULL, &tv); if (result <= 0) { break; } c='\0'; len=recv(sock,&c,1,0); if((len<=0) || (pos>4000)) { return(-1); } if(pos+1>=size) { size+=4096; if(buf==NULL) { buf=(char *)calloc(size,sizeof(char)); } else { buf=(char *)realloc(buf,size*sizeof(char)); } } buf[pos]=c; pos++; if(pos>=1&&buf[pos-1]=='\n') { if(pos>=2&&buf[pos-2]=='\r') { buf[pos-2]='\0'; pos-=2; break; } else{ buf[pos-1]='\0'; pos--; break; } } } len=strlen(string01); if(buf==NULL) { return(-1); } else { char * string04; char * work; unsigned int i; string04=(char *)malloc(strlen(string01)+4); work = string04; for( i=0 ; i=(n+1)) { memcpy(string01,string04,n+1); pos=strlen(string01); } else { pos=0; } free(string04); } free(buf); return(pos); } int recvjisoneline(int sock,char * string01) { fd_set fds, readfds; struct timeval tv; unsigned int result; FD_ZERO(&readfds); FD_SET((unsigned)sock, &readfds); tv.tv_sec = timeout01; tv.tv_usec = 0; char * buf; unsigned int len,size,pos,n; char c; size=0; buf=NULL; pos=0; while(1) { memcpy(&fds, &readfds, sizeof(fd_set)); result = select(sock+1, &fds, NULL, NULL, &tv); if (result <= 0) { break; } c='\0'; len=recv(sock,&c,1,0); if((len<=0) || (pos>4000)) { return(-1); } if(pos+1>=size) { size+=4096; if(buf==NULL) { buf=(char *)calloc(size,sizeof(char)); } else { buf=(char *)realloc(buf,size*sizeof(char)); } } buf[pos]=c; pos++; if(pos>=1&&buf[pos-1]=='\n') { if(pos>=2&&buf[pos-2]=='\r') { buf[pos-2]='\0'; pos-=2; break; } else{ buf[pos-1]='\0'; pos--; break; } } } len=strlen(string01); if(buf==NULL) { return(-1); } else { char * string04; char * work; unsigned int i; string04=(char *)malloc(strlen(buf)+4); work = string04; for( i=0 ; i=(n+1)) { memcpy(string01,string04,n+1); pos=strlen(string01); } else { pos=0; } free(string04); } free(buf); return(pos); } int recvjisquoted(int sock,char * string01) { fd_set fds, readfds; struct timeval tv; unsigned int result; FD_ZERO(&readfds); FD_SET((unsigned)sock, &readfds); tv.tv_sec = timeout01; tv.tv_usec = 0; char * buf; unsigned int len,size,pos,n; char c,c1,c2; unsigned int n1,n2; size=0; buf=NULL; pos=0; int quoted=0; while(1) { memcpy(&fds, &readfds, sizeof(fd_set)); result = select(sock+1, &fds, NULL, NULL, &tv); if (result <= 0) { break; } c='\0'; len=recv(sock,&c,1,0); if((len<=0) || (pos>4000)) { return(-1); } if(pos+1>=size) { size+=4096; if(buf==NULL) { buf=(char *)calloc(size,sizeof(char)); } else { buf=(char *)realloc(buf,size*sizeof(char)); } } buf[pos]=c; pos++; if (c == '=') { quoted++; continue; } if (quoted == 1) { c1=c; quoted++; continue; } if (quoted == 2) { c2=c; quoted = 0; if ((c1 == 0x0D) && (c2 == 0x0A)) { pos-=3; continue; } if (c1>='a') n1=c1-'a'+10; else if (c1>='A') n1=c1-'A'+10; else if (c1>='0') n1=c1-'0'; if (c2>='a') n2=c2-'a'+10; else if (c2>='A') n2=c2-'A'+10; else if (c2>='0') n2=c2-'0'; pos-=3; buf[pos]=n1*16+n2; pos++; continue; } if(pos>=1&&buf[pos-1]=='\n') { if(pos>=2&&buf[pos-2]=='\r') { buf[pos-2]='\0'; pos-=2; break; } else{ buf[pos-1]='\0'; pos--; break; } } } len=strlen(string01); if(buf==NULL) { return(-1); } else { char * string04; char * work; unsigned int i; string04=(char *)malloc(strlen(buf)+4); work = string04; for( i=0 ; i=(n+1)) { memcpy(string01,string04,n+1); pos=strlen(string01); } else { pos=0; } free(string04); } free(buf); return(pos); } int recvutfquoted(int sock,char * string01) { fd_set fds, readfds; struct timeval tv; unsigned int result; FD_ZERO(&readfds); FD_SET((unsigned)sock, &readfds); tv.tv_sec = timeout01; tv.tv_usec = 0; char * buf; unsigned int len,size,pos,n; char c,c1,c2; unsigned int n1,n2; size=0; buf=NULL; pos=0; int quoted=0; while(1) { memcpy(&fds, &readfds, sizeof(fd_set)); result = select(sock+1, &fds, NULL, NULL, &tv); if (result <= 0) { break; } c='\0'; len=recv(sock,&c,1,0); if((len<=0) || (pos>4000)) { return(-1); } if(pos+1>=size) { size+=4096; if(buf==NULL) { buf=(char *)calloc(size,sizeof(char)); } else { buf=(char *)realloc(buf,size*sizeof(char)); } } buf[pos]=c; pos++; if (c == '=') { quoted++; continue; } if (quoted == 1) { c1=c; quoted++; continue; } if (quoted == 2) { c2=c; quoted = 0; if ((c1 == 0x0D) && (c2 == 0x0A)) { pos-=3; continue; } if (c1>='a') n1=c1-'a'+10; else if (c1>='A') n1=c1-'A'+10; else if (c1>='0') n1=c1-'0'; if (c2>='a') n2=c2-'a'+10; else if (c2>='A') n2=c2-'A'+10; else if (c2>='0') n2=c2-'0'; pos-=3; buf[pos]=n1*16+n2; pos++; continue; } if(pos>=1&&buf[pos-1]=='\n') { if(pos>=2&&buf[pos-2]=='\r') { buf[pos-2]='\0'; pos-=2; break; } else{ buf[pos-1]='\0'; pos--; break; } } } len=strlen(string01); if(buf==NULL) { return(-1); } else { char * string04; char * work; unsigned int i; string04=(char *)malloc(strlen(buf)+4); work = string04; for( i=0 ; i=(n+1)) { memcpy(string01,string04,n+1); pos=strlen(string01); } else { pos=0; } free(string04); } free(buf); return(pos); } int recvutfbase64(int sock,char * string01) { fd_set fds, readfds; struct timeval tv; unsigned int result; FD_ZERO(&readfds); FD_SET((unsigned)sock, &readfds); tv.tv_sec = timeout01; tv.tv_usec = 0; char * buf; unsigned int len,size,pos,n; char c; size=0; buf=NULL; pos=0; while(1) { memcpy(&fds, &readfds, sizeof(fd_set)); result = select(sock+1, &fds, NULL, NULL, &tv); if (result <= 0) { break; } c='\0'; len=recv(sock,&c,1,0); if((len<=0) || (pos>4000)) { return(-1); } if(pos+1>=size) { size+=4096; if(buf==NULL) { buf=(char *)calloc(size,sizeof(char)); } else { buf=(char *)realloc(buf,size*sizeof(char)); } } buf[pos]=c; pos++; if(pos>=1&&buf[pos-1]=='\n') { if(pos>=2&&buf[pos-2]=='\r') { buf[pos-2]='\0'; pos-=2; break; } else{ buf[pos-1]='\0'; pos--; break; } } } len=strlen(string01); if(buf==NULL) { return(-1); } else { char * string03; char * work; unsigned int i; string03=(char *)malloc(strlen(buf)+4); base64_decode(buf, string03); char * string04; string04=(char *)malloc(strlen(string03)+4); work = string04; for( i=0 ; i=(n+1)) { memcpy(string01,string04,n+1); pos=strlen(string01); } else { pos=0; } free(string03); free(string04); } free(buf); return(pos); } int recvutf8bit(int sock,char * string01) { fd_set fds, readfds; struct timeval tv; unsigned int result; FD_ZERO(&readfds); FD_SET((unsigned)sock, &readfds); tv.tv_sec = timeout01; tv.tv_usec = 0; char * buf; unsigned int len,size,pos,n; char c; size=0; buf=NULL; pos=0; while(1) { memcpy(&fds, &readfds, sizeof(fd_set)); result = select(sock+1, &fds, NULL, NULL, &tv); if (result <= 0) { break; } c='\0'; len=recv(sock,&c,1,0); if((len<=0) || (pos>4000)) { return(-1); } if(pos+1>=size) { size+=4096; if(buf==NULL) { buf=(char *)calloc(size,sizeof(char)); } else { buf=(char *)realloc(buf,size*sizeof(char)); } } buf[pos]=c; pos++; if(pos>=1&&buf[pos-1]=='\n') { if(pos>=2&&buf[pos-2]=='\r') { buf[pos-2]='\0'; pos-=2; break; } else{ buf[pos-1]='\0'; pos--; break; } } } len=strlen(string01); if(buf==NULL) { return(-1); } else { char * string04; char * work; unsigned int i; string04=(char *)malloc(strlen(buf)+4); work = string04; for( i=0 ; i=(n+1)) { memcpy(string01,string04,n+1); pos=strlen(string01); } else { pos=0; } free(string04); } free(buf); return(pos); } int closesock(int sock) { shutdown(sock,2); int n = closesocket(sock); WSACleanup(); return(n); } char * qencode(char * string01,char * string02) { unsigned int n = strlen(string01); if (strlen(string02) > n*3+6) { qpencode( &n, string01, string02); } else { * string02='\0'; } return string02; } char * qdecode(char * string01,char * string02) { if (strlen(string02) > strlen(string01)) { qpdecode( string01, string02); } else { * string02='\0'; } return string02; } char * bencode(char * string01,char * string02) { unsigned int n = strlen(string01); if (strlen(string02) > n*2+6) { base64( string01, n, string02); } else { * string02='\0'; } return string02; } char * bdecode(char * string01,char * string02) { if (strlen(string02) > strlen(string01)) { base64_decode( string01, string02); } else { * string02='\0'; } return string02; } char * shift2jis(char * string01,char * string02) { return shifttojis( string01, string02); } char * jis2shift(char * string01,char * string02) { return jistoshift( string01, string02); } char * shift2utf(char * string01,char * string02) { return shift_to_utf( string01, string02); } char * utf2shift(char * string01,char * string02) { if (strlen(string01)>=2) { char * string03=(char *)malloc(strlen(string01)+1); char *s=string01; char *d=string03; while(1) { if((*s==(char)0xc2) && (*(s+1)==(char)0xa0)) { *d=' '; s++; } else *d=*s; s++; d++; if(*s=='\0') { *d=*s; break; } } strcpy(string01,string03); free(string03); } if (strlen(string01)>=3) { char * string03=(char *)malloc(strlen(string01)+1); char *s=string01; char *d=string03; while(1) { if((*s==(char)0xe2) && (*(s+1)==(char)0x80) && (*(s+2)==(char)0x8b)) { s++; s++; d--; } else *d=*s; s++; d++; if(*s=='\0') { *d=*s; break; } } strcpy(string01,string03); free(string03); } return utf_to_shift( string01, string02); } int qpencode( unsigned int *n,char *data,char *into) { unsigned int size = strlen( data); unsigned char c; unsigned int i; char *ptr; ptr=into; for(i=0;i 126 ) { if ( (*n) < 73) { *ptr='='; (ptr)++; if ((c >> 4) < 10) *ptr = (c >> 4)+48; else *ptr = (c >> 4)+55; (ptr)++; if ((c & 0xF) < 10) *ptr = (c & 0xF)+48; else *ptr = (c & 0xF)+55; (ptr)++; (*n)+=3; if((*n)==75) { *ptr='='; (ptr)++; *ptr='\r'; (ptr)++; *ptr='\n'; (ptr)++; (*n)=0; } } else { *ptr='='; (ptr)++; *ptr='\r'; (ptr)++; *ptr='\n'; (ptr)++; (*n)=0; *ptr='='; (ptr)++; if ((c >> 4) < 10) *ptr = (c >> 4)+48; else *ptr = (c >> 4)+55; (ptr)++; if ((c & 0xF) < 10) *ptr = (c & 0xF)+48; else *ptr = (c & 0xF)+55; (ptr)++; (*n)+=3; } } else { *ptr=c; (ptr)++; (*n)++; if((*n)==75) { *ptr='='; (ptr)++; *ptr='\r'; (ptr)++; *ptr='\n'; (ptr)++; (*n)=0; } } } *ptr='\0'; return 0; } int qpdecode(char * string01,char * string02) { unsigned int len; unsigned int index01,index02; unsigned int n1,n2; n1=0; n2=0; index01=0; index02=0; len=strlen(string01); while (index01='a') n1=string01[index01+1]-'a'+10; else if (string01[index01+1]>='A') n1=string01[index01+1]-'A'+10; else if (string01[index01+1]>='0') n1=string01[index01+1]-'0'; if (string01[index01+2]>='a') n2=string01[index01+2]-'a'+10; else if (string01[index01+2]>='A') n2=string01[index01+2]-'A'+10; else if (string01[index01+2]>='0') n2=string01[index01+2]-'0'; string02[index02]=n1*16+n2; index02=index02+1; } index01=index01+3; } else { string02[index02]=string01[index01]; index01=index01+1; index02=index02+1; } } string02[index02]=0; return 0; } int base64(char *data,unsigned int size,char *into) { char now[3]; char c; unsigned int i,h,n; char *ptr; ptr=into; n=0; for(i=0;i>2)&0x3F; outchar(&n,&ptr,c); c=((now[0]<<4)&0x30)+((now[1]>>4)&0x0F); c&=0x3F; outchar(&n,&ptr,c); c=((now[1]<<2)&0x3C)+((now[2]>>6)&0x03); c&=0x3F; outchar(&n,&ptr,c); c=now[2]&0x3F; c&=0x3F; outchar(&n,&ptr,c); } else { if(i+1>2)&0x3F; outchar(&n,&ptr,c); c=((now[0]<<4)&0x30)+((now[1]>>4)&0x0F); c&=0x3F; outchar(&n,&ptr,c); c=((now[1]<<2)&0x3C); c&=0x3F; outchar(&n,&ptr,c); } else { now[0]=data[i]; c=(now[0]>>2)&0x3F; outchar(&n,&ptr,c); c=((now[0]<<4)&0x30); c&=0x3F; outchar(&n,&ptr,c); } } } h=4-(n%4); if(h!=4) { for(i=0;i= 'A' && c <= 'Z' ) wk |= (c - 'A') + 0; else if( c >= 'a' && c <= 'z' ) wk |= (c - 'a') + 26; else if( c >= '0' && c <= '9' ) wk |= (c - '0') + 52; else if( c == '+' ) wk |= 62; else if( c == '/' ) wk |= 63; else if( c == '=' ) { wk |= 0; end01++; } else { wk >>= 6; continue; } if( pos == 3 ) { if (end01==0) { for(j=2 ; j>=0 ; j--) { *p = (wk>>(j*8) & 0xff); p++; n++; } } if (end01==1) { for(j=2 ; j>=1 ; j--) { *p = (wk>>(j*8) & 0xff); p++; n++; } } if (end01==2) { for(j=2 ; j>=2 ; j--) { *p = (wk>>(j*8) & 0xff); p++; n++; } } wk = 0; pos = 0; } else pos++; } if (pos==2) { for(i=0 ; i<(4-pos) ; i++) wk <<= 6; for(j=2 ; j>=2 ; j--) { *p = (wk>>(j*8) & 0xff); p++; n++; } } if (pos==3) { for(i=0 ; i<(4-pos) ; i++) wk <<= 6; for(j=2 ; j>=1 ; j--) { *p = (wk>>(j*8) & 0xff); p++; n++; } } *p = '\0'; return n; } char * shifttojis(char * string01,char * string04) { unsigned int index01; char * index02; unsigned int index03,len,n,flag01; unsigned char shift01,hi,lo; char string02[256]; char * string03; char strhan01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strzen01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strhan02[256] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; char strzen02[256] = " !”#$%&’()*+,−./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}〜"; char strhan03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚"; char strzen03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜"; index01=0; index03=0; len=strlen(string01); string03=(char *)malloc(strlen(string01)*4+4); flag01=0; while (index01= 0x81) && (shift01<=0x9F)) || ((shift01>=0xE0) && (shift01<=0xEF))) { if (flag01==0) { string03[index03]=0x1b; string03[index03+1]=0x24; string03[index03+2]=0x42; index03=index03+3; flag01=1; } hi=string01[index01]; lo=string01[index01+1]; if (hi<=0x9f) { hi-=0x71; } else { hi-=0xb1; } hi=hi*2+1; if (lo>=0x7f) { lo-=1; } if (lo>=0x9e) { lo-=0x7d; hi+=1; } else { lo-=0x1f; } string03[index03]=hi; string03[index03+1]=lo; index01=index01+2; index03=index03+2; } else { string02[0] = string01[index01]; string02[1] = string01[index01+1]; string02[2] = 0; index02=strstr(strhan01,string02); if ((index02!=0) && (string01[index01+1]!=0)) { if (flag01==0) { string03[index03]=0x1b; string03[index03+1]=0x24; string03[index03+2]=0x42; index03=index03+3; flag01=1; } hi=strzen01[index02-strhan01]; lo=strzen01[index02-strhan01+1]; if (hi<=0x9f) { hi-=0x71; } else { hi-=0xb1; } hi=hi*2+1; if (lo>=0x7f) { lo-=1; } if (lo>=0x9e) { lo-=0x7d; hi+=1; } else { lo-=0x1f; } string03[index03]=hi; string03[index03+1]=lo; index01=index01+2; index03=index03+2; } else { index02=strchr(strhan02,string01[index01]); if (index02!=0) { // string03[index03]=strzen02[(index02-strhan02)*2]; // string03[index03+1]=strzen02[(index02-strhan02)*2+1]; // index03=index03+2; if (flag01==1) { string03[index03]=0x1b; string03[index03+1]=0x28; string03[index03+2]=0x42; index03=index03+3; flag01=0; } string03[index03]=string01[index01]; index03=index03+1; } else { index02=strchr(strhan03,string01[index01]); if (index02!=0) { if (flag01==0) { string03[index03]=0x1b; string03[index03+1]=0x24; string03[index03+2]=0x42; index03=index03+3; flag01=1; } hi=strzen03[(index02-strhan03)*2]; lo=strzen03[(index02-strhan03)*2+1]; if (hi<=0x9f) { hi-=0x71; } else { hi-=0xb1; } hi=hi*2+1; if (lo>=0x7f) { lo-=1; } if (lo>=0x9e) { lo-=0x7d; hi+=1; } else { lo-=0x1f; } string03[index03]=hi; string03[index03+1]=lo; index03=index03+2; } else { if (flag01==1) { string03[index03]=0x1b; string03[index03+1]=0x28; string03[index03+2]=0x42; index03=index03+3; flag01=0; } string03[index03]=string01[index01]; index03=index03+1; } } index01=index01+1; } } } if (flag01==1) { string03[index03]=0x1b; string03[index03+1]=0x28; string03[index03+2]=0x42; index03=index03+3; flag01=0; } string03[index03]=0; len=strlen(string04); n=strlen(string03); if (len>=n) { strcpy(string04,string03); } else { * string04='\0'; } free(string03); return string04; } char * jistoshift(char * string01,char * string04) { unsigned int n,len,flag01,index01,index03,index04,index05,index06,index07; unsigned char hi,lo; char * string03; char * string07; index04=0; index07=0; string03=(char *)malloc(strlen(string01)+4); string07=(char *)malloc(strlen(string01)+4); flag01=0; len=strlen(string01); index01=0; index03=0; index05=0; index06=0; while (index01> 1) + 0x81; if (lo >= 0x7f) lo++; if (hi > 0x9f) hi += 0x40; string07[index07]=hi; string07[index07+1]=lo; index03=index03+2; index07=index07+2; } } else { string07[index07]=string03[index03]; index03=index03+1; index07=index07+1; } } string07[index07]=0; len=strlen(string04); n=strlen(string07); if (len>=n) { strcpy(string04,string07); } else { * string04='\0'; } free(string03); free(string07); return string04; } char * jistoshifth(char * string01,char * string04) { unsigned int charset01,pos01; char c1,c2; unsigned int n1,n2; unsigned int n,len,len01,flag01,index01,index03,index04,index05,index06,index07,index08; char * index02; unsigned char hi,lo; char * string03; char * string05; char * string06; char * string07; char * string08; char check01[20] = "=?ISO-2022-JP?B?"; char check011[20] = "=?ISO-2022-JP?b?"; char check02[20] = "=?iso-2022-jp?B?"; char check03[20] = "=?ISO-2022-JP?Q?"; char check04[20] = "=?iso-2022-jp?Q?"; char check05[20] = "=?UTF-8?B?"; char check06[20] = "=?utf-8?B?"; char check07[20] = "=?UTF-8?Q?"; char check08[20] = "=?utf-8?Q?"; char check09[20] = "=?SJIS?B?"; char check091[20] = "=?SJIS?b?"; char check092[20] = "=?sjis?b?"; char check10[20] = "=?Shift_JIS?B?"; char check101[20] = "=?Shift-JIS?B?"; char check11[20] = "=?SJIS?Q?"; char check111[20] = "=?SJIS?q?"; char check112[20] = "=?sjis?q?"; char check12[20] = "=?Shift_JIS?Q?"; char check121[20] = "=?Shift-JIS?Q?"; char check13[20] = "*=ISO-2022-JP'ja'"; char check14[20] = "*=iso-2022-jp'ja'"; char check15[20] = "*=ISO-2022-JP''"; char check16[20] = "*=iso-2022-jp''"; char check17[20] = "*=UTF-8'ja'"; char check18[20] = "*=utf-8'ja'"; char check19[20] = "*=UTF-8''"; char check20[20] = "*=utf-8''"; char check21[20] = "*=Shift_JIS'ja'"; char check211[20] = "*=Shift-JIS'ja'"; char check22[20] = "*=Shift_JIS''"; char check221[20] = "*=Shift-JIS''"; index04=0; index07=0; char * work; unsigned int i,fname,qpheader; string03=(char *)malloc(strlen(string01)+4); string05=(char *)malloc(strlen(string01)+4); string06=(char *)malloc(strlen(string01)+4); string07=(char *)malloc(strlen(string01)+4); work = string07; for( i=0 ; i='a') n1=c1-'a'+10; else if (c1>='A') n1=c1-'A'+10; else if (c1>='0') n1=c1-'0'; if (c2>='a') n2=c2-'a'+10; else if (c2>='A') n2=c2-'A'+10; else if (c2>='0') n2=c2-'0'; string03[index03]=n1*16+n2; index01=index01+2; } else string03[index03]=string01[index01]; index01=index01+1; index03=index03+1; } while (index01=n) { strcpy(string04,string07); } else { * string04='\0'; } free(string03); free(string05); free(string06); free(string07); free(string08); return string04; } if (charset01==2) { len=strlen(string04); n=strlen(string03); if (len>=n) { strcpy(string04,string03); } else { * string04='\0'; } free(string03); free(string05); free(string06); free(string07); free(string08); return string04; } index03=0; len=strlen(string03); while (index03> 1) + 0x81; if (lo >= 0x7f) lo++; if (hi > 0x9f) hi += 0x40; string07[index07]=hi; string07[index07+1]=lo; index03=index03+2; index07=index07+2; } } else { string07[index07]=string03[index03]; index03=index03+1; index07=index07+1; } } string07[index07]=0; len=strlen(string04); n=strlen(string07); if (len>=n) { strcpy(string04,string07); } else { * string04='\0'; } free(string03); free(string05); free(string06); free(string07); free(string08); return string04; } char * shift_to_utf(char * string01,char * string02) { char *param1,*param2; unsigned int len,n,done; done = FALSE; n = MultiByteToWideChar(CP_ACP, 0, string01, -1, NULL, 0 ); if(n != 0) { param1 = (char *)calloc(1,n*2 + 2); if (param1 != NULL) { n = MultiByteToWideChar(CP_ACP, 0, string01, -1, (LPWSTR)param1, n+1 ); if(n != 0) { done = TRUE; } } } if (done) { done = FALSE; n = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)param1, -1, NULL, 0, NULL, NULL); if(n != 0) { param2 = (char *)calloc(1,n + 1); if (param2 != NULL) { n = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)param1, -1, param2, n+1, NULL, NULL); if(n != 0) { done = TRUE; } } } } if (done) { len=strlen(string02); if (len>=n) { memcpy(string02,param2,n); } else { * string02='\0'; } } else { * string02='\0'; } free(param1); free(param2); return string02; } char * utf_to_shift(char * string01,char * string02) { char *param1,*param2; unsigned int len,n,done; done = FALSE; n = MultiByteToWideChar(CP_UTF8, 0, string01, -1, NULL, 0 ); if(n != 0) { param1 = (char *)calloc(1,n*2 + 2); if (param1 != NULL) { n = MultiByteToWideChar(CP_UTF8, 0, string01, -1, (LPWSTR)param1, n ); if(n != 0) { done = TRUE; } } } if (done) { done = FALSE; n = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)param1, -1, NULL, 0, NULL, NULL); if(n != 0) { param2 = (char *)calloc(1,n + 2); if (param2 != NULL) { n = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)param1, -1, param2, n, NULL, NULL); if(n != 0) { done = TRUE; } } } } if (done) { len=strlen(string02); if (len>=n) { memcpy(string02,param2,n); } else { * string02='\0'; } } else { * string02='\0'; } free(param1); free(param2); return string02; } int openfile(char * string01) { FILE * fp01; if((fp01=fopen(string01,"wb"))==NULL) { return(-1); } else { return (int)fp01; } } int savefile64(int fp01,char * string01) { char string02[256]; if (strlen(string01)>0) { unsigned long read_size=(unsigned long)base64_decode(string01, string02); fwrite(string02, 1, read_size, (struct _iobuf *)fp01); } return(0); } int closefile(int fp01) { fclose((struct _iobuf *)fp01); return(0); } char * jis64_decode(char * string01,char * string02) { unsigned int len,n; char * string04; char * work; unsigned int i; string04=(char *)malloc(strlen(string01)+4); work = string04; for( i=0 ; i=n+1) { memcpy(string02,string04,n+1); } else { * string02='\0'; } free(string04); return string02; } char * subheader(char * string01,char * string02) { unsigned int len,n; char * string04; char * work; unsigned int i; string04=(char *)malloc(strlen(string01)+4); work = string04; for( i=0 ; i=n+1) { memcpy(string02,string04,n+1); } else { * string02='\0'; } free(string04); return string02; } char * subjisoneline(char * string01,char * string02) { unsigned int len,n; char * string04; char * work; unsigned int i; string04=(char *)malloc(strlen(string01)+4); work = string04; for( i=0 ; i=n+1) { memcpy(string02,string04,n+1); } else { * string02='\0'; } free(string04); return string02; } char * subjisquoted(char * string01,char * string02) { unsigned int len,n; char * string03; char * string04; char * work; unsigned int i,index01,index03; unsigned int n1,n2; n1=0; n2=0; string03=(char *)malloc(strlen(string01)+4); index01=0; index03=0; len=strlen(string01); while (index01='a') n1=string01[index01+1]-'a'+10; else if (string01[index01+1]>='A') n1=string01[index01+1]-'A'+10; else if (string01[index01+1]>='0') n1=string01[index01+1]-'0'; if (string01[index01+2]>='a') n2=string01[index01+2]-'a'+10; else if (string01[index01+2]>='A') n2=string01[index01+2]-'A'+10; else if (string01[index01+2]>='0') n2=string01[index01+2]-'0'; string03[index03]=n1*16+n2; index03=index03+1; } index01=index01+3; } else { string03[index03]=string01[index01]; index01=index01+1; index03=index03+1; } } string03[index03]=0; string04=(char *)malloc(strlen(string03)+4); work = string04; for( i=0 ; i=n+1) { memcpy(string02,string04,n+1); } else { * string02='\0'; } free(string03); free(string04); return string02; } char * subutfquoted(char * string01,char * string02) { unsigned int len,n; char * string03; char * string04; char * work; unsigned int i,index01,index03; unsigned int n1,n2; n1=0; n2=0; string03=(char *)malloc(strlen(string01)+4); index01=0; index03=0; len=strlen(string01); while (index01='a') n1=string01[index01+1]-'a'+10; else if (string01[index01+1]>='A') n1=string01[index01+1]-'A'+10; else if (string01[index01+1]>='0') n1=string01[index01+1]-'0'; if (string01[index01+2]>='a') n2=string01[index01+2]-'a'+10; else if (string01[index01+2]>='A') n2=string01[index01+2]-'A'+10; else if (string01[index01+2]>='0') n2=string01[index01+2]-'0'; string03[index03]=n1*16+n2; index03=index03+1; } index01=index01+3; } else { string03[index03]=string01[index01]; index01=index01+1; index03=index03+1; } } string03[index03]=0; string04=(char *)malloc(strlen(string03)+4); work = string04; for( i=0 ; i=n+1) { memcpy(string02,string04,n+1); } else { * string02='\0'; } free(string03); free(string04); return string02; } char * subutfbase64(char * string01,char * string02) { unsigned int len,n; char * string04; char * work; unsigned int i; char * string03; string03=(char *)malloc(strlen(string01)+4); base64_decode(string01, string03); string04=(char *)malloc(strlen(string03)+4); work = string04; for( i=0 ; i=n+1) { memcpy(string02,string04,n+1); } else { * string02='\0'; } free(string04); return string02; } char * subbase64(char * string01,char * string02) { unsigned int len,n; char * string04; string04=(char *)malloc(strlen(string01)+4); base64_decode(string01, string04); n=strlen(string04); len=strlen(string02); if (len>=n+1) { memcpy(string02,string04,n+1); } else { * string02='\0'; } free(string04); return string02; } char * subutf8bit(char * string01,char * string02) { unsigned int len,n; char * string04; char * work; unsigned int i; string04=(char *)malloc(strlen(string01)+4); work = string04; for( i=0 ; i=n+1) { memcpy(string02,string04,n+1); } else { * string02='\0'; } free(string04); return string02; } }