⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wzoutput.cxx

📁 Delaunay三角形的网格剖分程序
💻 CXX
字号:
#include <string.h>#include <stdio.h>#include <stdlib.h>#ifndef strstream_hxx#define strstream_hxx#include <strstream.h>#endif#include "wzoutput.hxx"wzOutput& 	wzOutputDefault		= * new wzOutput(cerr);wzOutput&	wzOutput::Default	= * new wzOutput(cerr);wzOutput&	wzOutput::Warning	= * new wzOutput(cout);wzOutput&	wzOutput::Error  	= * new wzOutput(cerr);const unsigned wzOutput::allocated = 1000;const unsigned wzOutput::format_length = 256; //sizeof(wzOutput::Request[.]);extern "C" void wzPrintDocumentationEntry(char* url){  char base[256],entry[256],*c;  int i=0;  c = url;  while(*c){    if(*c=='.'){c++; break;}    base[i++]=*c++;  }  base[i]='\0'; i=0;  while(*c){    if(*c=='#'){c++; break;}    c++;  }  while(*c){    entry[i++]=*c++;  }  entry[i]='\0';  wzPrintDocumentationEntry(wzOutput::Default,base,entry);}wzOutput& wzOutput::operator,(wzOutputItem p){return (*this)<<p;}wzOutput& wzOutput::operator()(char *format){fullFormat = format; pos=0; return *this;}wzOutput::wzOutput(ostream& stream):out(stream),fullFormat(""),pos(0),Flush(1),throw_data(0),throw_format(0){Request[0]='\0';}wzOutput::wzOutput():out(cerr),fullFormat(""),pos(0),Flush(1),throw_data(0),throw_format(0){Request[0]='\0';}static void wzOutputCall_wzColor_(void *o, char *t,unsigned m, char *f){((wzColor*)(o))->get(t);}static void wzOutputCall_char_(void *o, char *t,unsigned m, char *f){sprintf(t,"%c",*(char*)&o);}static void wzOutputCall_int_(void *o, char *t,unsigned m, char *f){sprintf(t,"%d",*(int*)&o);}static void wzOutputCall_unsigned_(void *o, char *t,unsigned m, char *f){sprintf(t,"%u",*(unsigned*)&o);}static void wzOutputCall_float_(void *o, char *t,unsigned m, char *f){sprintf(t,"%g",*(float*)o);}static void wzOutputCall_double_(void *o, char *t,unsigned m, char *f){  double d=*(double*)o;  if(d>=wzInfty)    sprintf(t,"%s","oo");  else if(d<=-wzInfty)    sprintf(t,"%s","-oo");  else    sprintf(t,"%lg",d);}static void wzOutputCall_str_(void *o, char *t,unsigned m, char *f){sprintf(t,"%s",o);}wzOutputItem::wzOutputItem(char c):object(*(void**)(int*)&c),output(wzOutputCall_char_){;}wzOutputItem::wzOutputItem(int i):object(*(void**)(int*)&i),output(wzOutputCall_int_){;}wzOutputItem::wzOutputItem(const wzColor& i):object((void*)&i),output(wzOutputCall_wzColor_){;}wzOutputItem::wzOutputItem(unsigned i):object(*(void**)(int*)&i),output(wzOutputCall_unsigned_){;}wzOutputItem::wzOutputItem(float f):object((void*)(float*)new float(f)),output(wzOutputCall_float_){;}wzOutputItem::wzOutputItem(double f):object((void*)(double*)new double(f)),output(wzOutputCall_double_){;}wzOutputItem::wzOutputItem(char* i):object(*(void**)(int*)&i),output(wzOutputCall_str_){;}wzOutput& wzOutput::operator<<(wzOutputItem p){char c; int i=0,noformat=0,m,format_error=0,data_error=0; char buffer[allocated]; c=fullFormat[pos]; while(c!='<'){   if(c=='\\') {pos++; c=fullFormat[pos];}   if(c=='\0') {if(noformat) break; pos=0; c=fullFormat[pos]; noformat=1;}   pos++; out<<c; c=fullFormat[pos]; } if(c!='<'){   i = m = 0; }else{   pos++;   if(fullFormat[pos]=='0'){     m = 0;   }else{     m = atoi(&fullFormat[pos]);     if(m>0){while(m>9999){pos++;m = atoi(&fullFormat[pos]);}     if(m>999) pos++;     if(m>99) pos++;     if(m>9) pos++;     pos++;     }else{       m = -1;     }   }   while(c=fullFormat[pos]){     if(c=='>') {pos++; break;}     if(c=='\\') pos++;     Request[i] = fullFormat[pos];     pos++; i++; if(i>=format_length) break;   } } Request[i]='\0'; try{   p.output(p.object,buffer,m,Request); }catch(wzOutputFormatError){   format_error = 1; }catch(...){   data_error = 1;   for(int j=0;j<4;j++) buffer[j]='*';   buffer[4]='\0'; } if(m>=0){   buffer[m]='\0';   i=0; while(buffer[i]){i++;} while(i<m){buffer[i]=' '; i++;} }else{   buffer[allocated-1]='\0'; } out<<buffer; if(c!='>'){   out<<'\n'; }else if(Flush){   flush(); } if(data_error && throw_data) {throw wzOutputDataError();} if(format_error && throw_format) {throw wzOutputFormatError();} return *this;}void wzOutput::flush(){  char c=fullFormat[pos];  while(c!='<'){    if(c=='\\') {pos++; c=fullFormat[pos];}    if(c=='\0') {pos=0; break;}    pos++; out<<c; c=fullFormat[pos];  }}static const int buflen=10000;static int recursive = 0;void wzPrintDocumentationEntry(wzOutput& o, wzString p, wzString i){  char filename[1000], entry[]="NAME=\"", entryname[1000], buffer[buflen];  int istext=1;  FILE *ff;int ib,ie; char ce; int found=0;  sprintf(filename,"%s/%s.html",wzHomePath,p);  sprintf(entryname,"NAME=\"%s\"",i);  ff=fopen(filename,"r");  if(!ff){    if(recursive){      o("documentation not found in <>; check $COG_HOME\n")<<filename;    }else{      recursive=1;      o("documentation not found in <>;\n")<<filename;      wzPrintDocumentationEntry(o,"wzwarningtest","Documentation_Not_Found");      recursive=0;    }    return;  }  //  o("--- extracted from <> ---\n")<<filename;  found=0;  while(!feof(ff)){    fgets(buffer,buflen,ff);    ib=0;ie=0;    while(ce=entryname[ie]){      if(buffer[ib]=='\0') break;      if(buffer[ib]!=ce) {ie=0;ib++;continue;}      ib++; ie++;    }    if(ce) continue;    found=1;    fgets(buffer,buflen,ff);    while(!feof(ff)){      ib=0;ie=0;      while(ce=entry[ie]){	if(buffer[ib]=='\0') break;	if(buffer[ib]!=ce) {ie=0;ib++;continue;}	ib++; ie++;      }      if(ce) {	ie = 0; o("<>");	while(ce=buffer[ie]){	  if(ce=='<') istext = 0;	  if(istext) o << ce;	  if(ce=='>') istext = 1;	  ie++;	}	fgets(buffer,buflen,ff);	continue;      }      break;    }    break;  }  if(!found){    if(i[0]){      wzPrintDocumentationEntry(o,p,"");      return;    }else if(recursive){      o("documentation entry <> not found in <>.html;\n")<<i,p;    }else{      recursive=1;      o("documentation entry <> not found in <>.html;\n")<<i,p;      wzPrintDocumentationEntry(o,"wzwarningtest","Documentation_Entry_Not_Found");      recursive=0;    }  }  o("---- for more see <> ----\n")<<filename;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -