Frost Moon Project

isbnconv.cpp - isbnconv Ver.1.00 - Frost Moon Project   アクセスランキング  

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