00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <iostream>
00020 #include <iomanip>
00021 #include <stdio.h>
00022 #include <stdlib.h>
00023 #include <unistd.h>
00024 #include <errno.h>
00025 #include <string.h>
00026 #include <sys/types.h>
00027 #include <sys/socket.h>
00028 #include <netinet/in.h>
00029 #include <arpa/inet.h>
00030 #include <netdb.h>
00031
00032
00033
00034
00035 #define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
00036
00037
00038 #define __PRINTF__ printf
00039 #define __COUT__ cout << __FILENAME__ << std::dec << " [" << __LINE__ << "]\t"
00040 #define __E__ std::endl
00041
00042
00043
00044
00045
00046
00047 using namespace std;
00048
00049
00050
00051 int main(int argc, char** argv)
00052 {
00053 __COUT__ << "Starting doxygen main.html editor..." << __E__;
00054
00055 if(argc < 4)
00056 {
00057 __COUT__ << "Need 3 arguments: for the full path to main.html AND to ARRAY:<html-to-inject>" << __E__;
00058 return 0;
00059 }
00060 string mainfn = argv[1];
00061 string injectfn = argv[2];
00062 string inject2fn = argv[3];
00063 __COUT__ << "main.html destination full path: " << mainfn << __E__;
00064 __COUT__ << "main.html source full path: " << mainfn + ".bk" << __E__;
00065 __COUT__ << "inject.html source full path: " << injectfn << __E__;
00066 __COUT__ << "inject2.html source full path: " << inject2fn << __E__;
00067
00068 FILE *mainSrc = fopen((mainfn + ".bk").c_str(),"r");
00069 if(!mainSrc)
00070 {
00071 __COUT__ << "Failed to open... " << mainfn + ".bk" << __E__;
00072 return 0;
00073 }
00074 FILE *injectSrc = fopen((injectfn).c_str(),"r");
00075 if(!injectSrc)
00076 {
00077 __COUT__ << "Failed to open... " << injectfn << __E__;
00078 return 0;
00079 }
00080 FILE *inject2Src = fopen((inject2fn).c_str(),"r");
00081 if(!inject2Src)
00082 {
00083 __COUT__ << "Failed to open... " << inject2fn << __E__;
00084 return 0;
00085 }
00086 FILE *mainDest = fopen((mainfn).c_str(),"w");
00087 if(!mainSrc)
00088 {
00089 __COUT__ << "Failed to open... " << mainfn << __E__;
00090 return 0;
00091 }
00092
00093 char line[1000];
00094 unsigned int countdown = -1;
00095
00096 unsigned int injectIndex = 0;
00097
00098 bool injected = true;
00099 while(fgets(line,1000,mainSrc))
00100 {
00101 fputs(line,mainDest);
00102 __COUT__ << line << (line[strlen(line)-1] == '\n'?"":"\n");
00103
00104 if(injected &&
00105 !strcmp(line,"<div class=\"contents\">\n"))
00106 {
00107 injected = false;
00108 countdown = 0;
00109 injectIndex = 1;
00110
00111 }
00112 else if(injected &&
00113 !strcmp(line,"<head>\n"))
00114 {
00115 injected = false;
00116 countdown = 0;
00117 injectIndex = 2;
00118
00119 }
00120
00121
00122 if(!injected && countdown == 0)
00123 {
00124 injected = true;
00125
00126 switch(injectIndex)
00127 {
00128 case 1:
00129 {
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143 while(fgets(line,1000,injectSrc))
00144 {
00145 fputs(line,mainDest);
00146 __COUT__ << line << (line[strlen(line)-1] == '\n'?"":"\n");
00147 }
00148
00149
00150
00151
00152
00153 break;
00154 }
00155 case 2:
00156 {
00157 while(fgets(line,1000,inject2Src))
00158 {
00159 fputs(line,mainDest);
00160 __COUT__ << line << (line[strlen(line)-1] == '\n'?"":"\n");
00161 }
00162 break;
00163 }
00164 default:
00165 __COUT__ << "Unknown injection!" << __E__;
00166 }
00167
00168
00169 }
00170 else if(!injected)
00171 {
00172 --countdown;
00173 }
00174 }
00175
00176 fclose(mainDest); fclose(injectSrc); fclose(mainSrc);
00177
00178 __COUT__ << "Doxygen main.html editor complete!" << __E__;
00179
00180 return 0;
00181 }
00182