Home > ソフトウェア > isbnconv > isbnconv100.zip > isbnconv.cpp
広告
1 : /*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# 2 : isbnconv Ver.1.00 3 : Coded by x@rgs 4 : 5 : This code is released under NYSL Version 0.9982 6 : See NYSL_withfaq.TXT for further details. 7 : 8 : cl isbnconv.cpp kernel32.lib user32.lib /O1 /GS- /link /subsystem:windows /nodefaultlib /merge:".rdata=.text" 9 : #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*/ 10 : #define UNICODE 11 : #define _UNICODE 12 : #include<windows.h> 13 : #include<tchar.h> 14 : 15 : bool isbnconv(TCHAR* dst,const TCHAR *src){ 16 : bool hyphen=false; 17 : int length=0; 18 : TCHAR* str=(TCHAR*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(13+4+1)*sizeof(TCHAR)); 19 : 20 : for(int i=0;length<=13&&src[i];i++){ 21 : if(src[i]=='-')hyphen=true; 22 : else str[length++]=src[i]; 23 : } 24 : 25 : if(length==10){ 26 : for(int i=9;i>=0;i--){ 27 : str[i+3]=str[i]; 28 : } 29 : str[0]='9'; 30 : str[1]='7'; 31 : str[2]='8'; 32 : str[13]='\0'; 33 : 34 : unsigned int cd=0; 35 : 36 : for(int i=0;i<12;i++){ 37 : cd+=(str[i]-'0')*((i%2==0)?1:3); 38 : } 39 : cd%=10; 40 : str[12]=((cd%10)?10-cd:0)+'0'; 41 : str[13]='\0'; 42 : 43 : if(hyphen){ 44 : for(int i=12,ii=12;i>=0;i--,ii--){ 45 : if(i==11||i==6||i==3||i==2){ 46 : str[ii--+4]='-'; 47 : } 48 : str[ii+4]=str[i]; 49 : } 50 : str[17]='\0'; 51 : } 52 : lstrcpy(dst,str); 53 : }else if(length==13){ 54 : lstrcpyn(str,str+3,10); 55 : 56 : unsigned int cd=0; 57 : 58 : for(int i=0,ii=10;ii>=2;ii--){ 59 : cd+=(str[i++]-'0')*ii; 60 : } 61 : cd=11-cd%11; 62 : str[9]=(cd==11)?'0':(cd==10)?'X':cd+'0'; 63 : str[10]='\0'; 64 : 65 : if(hyphen){ 66 : for(int i=9,ii=9;i>=0;i--,ii--){ 67 : if(i==8||i==3||i==0){ 68 : str[ii--+3]='-'; 69 : } 70 : str[ii+3]=str[i]; 71 : } 72 : str[13]='\0'; 73 : } 74 : lstrcpy(dst,str); 75 : } 76 : 77 : HeapFree(GetProcessHeap(),0,str); 78 : return dst[0]!='\0'; 79 : } 80 : 81 : int getClipboardSize(){ 82 : if(!IsClipboardFormatAvailable(CF_TEXT))return -1; 83 : if(!OpenClipboard(NULL))return -1; 84 : 85 : HGLOBAL hglobal=GetClipboardData(CF_UNICODETEXT); 86 : 87 : CloseClipboard(); 88 : return GlobalSize(hglobal); 89 : } 90 : 91 : bool setClipboardText(const TCHAR* text,int length){ 92 : bool result=false; 93 : 94 : if(!OpenClipboard(NULL))return result; 95 : 96 : HGLOBAL hglobal=GlobalAlloc(GMEM_MOVEABLE,(length+1)*sizeof(TCHAR)); 97 : if(hglobal!=NULL){ 98 : lstrcpy((TCHAR*)GlobalLock(hglobal),text); 99 : GlobalUnlock(hglobal); 100 : EmptyClipboard(); 101 : result=SetClipboardData(CF_UNICODETEXT,hglobal)!=NULL; 102 : } 103 : CloseClipboard(); 104 : return result; 105 : } 106 : 107 : bool getClipboardText(TCHAR* result){ 108 : if(!IsClipboardFormatAvailable(CF_TEXT))return false; 109 : if(!OpenClipboard(NULL))return false; 110 : 111 : HGLOBAL hglobal=GetClipboardData(CF_UNICODETEXT); 112 : 113 : lstrcpy(result,(TCHAR*)GlobalLock(hglobal)); 114 : 115 : GlobalUnlock(hglobal); 116 : CloseClipboard(); 117 : 118 : return true; 119 : } 120 : 121 : extern "C" void WinMainCRTStartup(){ 122 : TCHAR* src=(TCHAR*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,getClipboardSize()); 123 : TCHAR* dst=(TCHAR*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(13+4+1)*sizeof(TCHAR)); 124 : 125 : if(!src||!dst||!getClipboardText(src))ExitProcess(1); 126 : if(isbnconv(dst,src)){ 127 : setClipboardText(dst,lstrlen(dst)); 128 : } 129 : HeapFree(GetProcessHeap(),0,dst); 130 : HeapFree(GetProcessHeap(),0,src); 131 : ExitProcess(0); 132 : }
Home > ソフトウェア > isbnconv > isbnconv100.zip > isbnconv.cpp