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

📄 cppsrc2.cpp

📁 BORLAND公司C语言对话框开发程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{    //split up a long string into several lines. String cannot exceed 254
 if (!*s) {
   outf << 0;
   return;
   }
 if (strlen(s) > 254) s[254] = '\0';   //truncate if too big
 outf << '\"';
 short count = 47;
 while (*s)  {
    if (s[0] == '\\' && s[1] == 'n' && s[2]) {
       outf << s[0] << s[1] << "\"\n     \"";
       count = 5;
       s++;    //extra increment to pass 'n'
       }
    else {
       outf << *s;
       count++;
       }
    s++;
    if (count > 75 && *s) {
       outf << "\"\n     \"";
       count = 5;
       }
    }
 outf << '\"';
}

void StaticTextWriteObj::writeCode()
{
  start(this);
  outf << ", ";
  if(Text[0] == '@' || Text[0] == 3 && Text[1] == '@')
    doAtText(Text);
  else
    doText(Text);
  outf << ");\n";
  finish(this);
}

void ColoredTextWriteObj::writeCode()
{
  start(this);
  outf << ", ";
  if(Text[0] == '@' || Text[0] == 3 && Text[1] == '@')
    doAtText(Text);
  else
    doText(Text);
  outf << ", 0x" << hex << Attrib << dec << ");\n";
  finish(this);
}

void ScrollBarWriteObj::writeCode()
{
  start(this);
  outf << ");\n";
  finish(this);
}

void ScrollBarWriteObj::writeVars()
{
 if (strcmp(VarName, "control1") != 0) //control1 is used by TMemo
   aVar(this);
 else needcontrol1 = True;
}

void ListBoxWriteObj::writeCode()
{
  start(this);
  outf << ", " << Columns << ", ";
  if (*ScrollBar != '\0')
    outf << "(TScrollBar*)" << ScrollBar << ");\n";
  else outf << "0);\n";
  finish(this);
}

void MemoWriteObj::writeCode()
{
  start(this);
  outf << ", " ;
  if (*HScroll != '\0')
    outf << "(TScrollBar*)" << HScroll << ", ";
  else outf << "0, ";
  if (*VScroll != '\0')
    outf << "(TScrollBar*)" << VScroll << ", 0, ";
  else outf << "0, 0, ";
  outf << BufSize << ");\n";
  finish(this);
}
void MemoWriteObj::writeFields()
{
  outf << "  ushort " << FieldName << ";   //" << Obj << " text length\n";
  outf << "  char " << TextFieldName << "[" << BufSize << "];   //"
       << Obj << " text\n";
}

void ClusterWriteObj::writeCode()
{
  start(this);
  for (int i=0; i < Items; i++)
    outf << ",\n  new TSItem(\"" << (char *)LabelColl->at(i) << "\"";
  outf << ", 0";
  for (i = 0; i <= Items; i++)
    outf << ")";
  outf << ";\n";
  finish(this);
}

void DoControls(void *p, void*)
{ViewObj *P = (ViewObj*)p;
 P->writeCode();
}

void DialogWriteObj::writeCode()
{
  outf << " TView *control";
  if (needcontrol1) outf << ", *control1;\n";
  else outf << ";\n";

  if (DefEvMsk != EvMsk)
     doBitOutput("", "eventMask", EvMsk, DefEvMsk, getEventWords);

  if (DefOptns != Optns)
     doBitOutput("", "options", Optns, DefOptns, getOptionWords);

  if (WinFlags != 5)    //5 is the default
     doBitOutput("", "flags", WinFlags, 5, getWinFlagWords);
  writeHelpCtx("this", HelpCtxSym, HCtx);                //!! needs work !!
  outf << endl;

  ScriptColl->forEach(DoControls, 0);
}

char* SkelDatName(char *exe, char* rtn)
//find where to locate cppskel.dat.  Use drive, directory of this exe file
{
 char drive[MAXDRIVE];
 char dir[MAXDIR];
 char name[MAXFILE];
 char ext[MAXEXT];
 fnsplit(exe, drive, dir, name, ext);
 fnmerge(rtn, drive, dir, "CPPSKEL", ".DAT");
 return rtn;
}

void subst(char *p) //make a substitution for @XXn
{
char tail[BIG];
short n = *(p+3) - '0';    //get the @XX #
*p = '\0';                 //terminate s at the '@'
strcpy(tail, p+4);         //keep the rest of the line
switch (n) {
  case 1 :                //this would be @XX1
       strcat(s, Dialog->Obj);
       strncat(s, tail, BIG-strlen(s));
       break;
  case 2 :
       strcat(s, "TDialog");
       strncat(s, tail, BIG-strlen(s));
       break;
  case 3 :
       strcat(s, "R");            //subst 'R' for 'T'
       strcat(s, Dialog->Obj+1);  //less the 'T'
       strncat(s, tail, BIG-strlen(s));
       break;
  case 4 :
       strcat(s, upperName);
       strncat(s, tail, BIG-strlen(s));
       break;
  case 5 :
       strcat(s, lowerName);
       strncat(s, tail, BIG-strlen(s));
       break;
  }
}

void doWriteItems(void *p, void* first)
{
 ViewObj *P = (ViewObj*)p;
 if (*P->VarName != '\0' && strcmp(P->VarName, "control") != 0
                 && strcmp(P->VarName, "control1") != 0) {
    if (*(int*)first)  {
       outf << " os";
       *(int*)first = False;
       }
    outf << " << " << P->VarName;
    }
}

void doTheWriteItems()
{//code to Write pointers in 'Write'
 int first = True;
 ScriptColl->forEach(doWriteItems, &first);
 if (!first) outf << ";\n";  //if !first, there is at least one item
}

void doReadItems(void *p, void* first)
{
 ViewObj *P = (ViewObj*)p;
 if (*P->VarName != '\0' && strcmp(P->VarName, "control") != 0
                 && strcmp(P->VarName, "control1") != 0) {
    if (*(int*)first)  {
       outf << " is";
       *(int*)first = False;
       }
    outf << " >> " << P->VarName;
    }
}

void doTheReadItems()
{//code to read pointers in 'read'
 int first = True;
 ScriptColl->forEach(doReadItems, &first);
 if (!first) outf << ";\n";  //if !first, there is at least one item
}

void doFields(void *p, void* first)
{     // fieldnames for the data transfer struct
 ViewObj *P = (ViewObj*)p;
 if (*(int*)first && *P->FieldName != '\0') {
    outf << "struct " << Dialog->FieldName << "  {\n";
    *(int*)first = False;
    }
 P->writeFields();
}

void doTheDataStruct()
{//code to build the data transfer struct
 if (Dialog->FieldName[0])  {  //no fieldname, no datarecord
   if (present[ListB])   //if we have listbox, define TListBoxRec
      outf <<
	"#if !defined(__TListBoxRec)\n"
	"#define __TListBoxRec\n"
	"struct TListBoxRec\n"
	"{\n"
	"    TCollection* collection;\n"
	"    short focused;\n"
	"};\n"
	"#endif\n\n";

   int first = True;
   ScriptColl->forEach(doFields, &first);
   if (!first) outf << "  };\n\n";  //if !first, there is at least one field
   }
}

void doVars(void *p, void*)
{ViewObj *P = (ViewObj*)p;
 P->writeVars();
}

void doTheVars()
 //define variables whose names are not "control"
{
 ScriptColl->forEach(doVars, 0);
 outf << endl;
}

void ancestorConstructor()
{
 outf << "       TDialog";
 doTRect(Dialog);
 outf << ", " << quoted(((DialogWriteObj*)(Dialog))->Title) << "),\n";
}

void doUsesStuff()
{
 static char* uses[] = {"TDialog", "TButton", "TStaticText", "TColoredText",
    "TInputLine", "TLabel", "THistory", "TInputLong", "TCheckBoxes",
    "TRadioButtons", "TMultiCheckBoxes", "TListBox", "TMemo", "TScrollBar"};

 short ts = 0;
 for (recType i = Button; i <= ScrollB; ((int)i)++)
    if (present[i]) {
       outf << "#define Uses_" << uses[i] << endl;
       ts |= (i == CheckB || i == RadioB || i == MultiCB);
       }
 if (ts)
    outf << "#define Uses_TSItem\n";
}

void doLinks(void *p, void*)
{char *P = (char*)p;
 outf << "__link(R" << (char*)((P)+1) << ")\n";  //subst 'R' for 'T'
}

void doIncludes()
{
  if (present[CText])
    outf << "#include \"tcolortx.h\"\n";
  if (present[ILong])
    outf << "#include \"tinplong.h\"\n";
}

//-------------------------------------------------------------------
// The following exit procedure is required in order to view error
// messages before Turbo Vision wipes out the screen
//-------------------------------------------------------------------
int exit_flag = 1;

void exitfunc(void)
{
  if( exit_flag )
  {
     cout << "\nStrike Enter key to continue" << endl;
     char c;
     cin.get(c);
  }
}

#pragma exit exitfunc  100

int main(int argc, char** argv)
// argv[1] is script file
// argv[2] is .src name
// argv[3] is error filename

{
 if (argc < 3) {
   cout << "Usage:  cppsrc2 <script filename> <source filename> [error filename]";
   exit(1);
   }
 if (argc >= 4) {
   freopen(argv[3], "w", stdout);
   exit_flag = 0;   // won't need hold up on exit
   }

 checkMemory();

 data.open(SkelDatName(argv[0], s), ios::in);
 if (!data.good()) {
   cout << "Can't open cppskel.dat" << endl;
   exit(1);
   }

 readScriptFile(argv[1]);  //argv(1) is temporary script file

 outf.open(argv[2], ios::out);
 if (!outf.good()) {
   cout << "Can't open source file" << endl;
   exit(1);
   }
 fnsplit(argv[2], 0, 0, upperName, 0);
 strupr(upperName);            //for use later
 strcpy(lowerName, upperName);
 strlwr(lowerName);

 while (!data.eof()) {
    data.getline(s, BIG);
    if (strcmp(s, "@ZZ0") == 0) Dialog->writeCode();
    else if (strcmp(s, "@ZZ1") == 0) doTheVars();
    else if (strcmp(s, "@ZZ2") == 0) doTheDataStruct();
    else if (strcmp(s, "@ZZ3") == 0) doTheReadItems();
    else if (strcmp(s, "@ZZ4") == 0) doTheWriteItems();
    else if (strcmp(s, "@ZZ5") == 0) ancestorConstructor();
    else if (strcmp(s, "@ZZ6") == 0) doUsesStuff();
    else if (strcmp(s, "@ZZ7") == 0) doIncludes();
    else if (strcmp(s, "@ZZ8") == 0) classCollection->forEach(doLinks, 0);
    else  {
       char *p = strstr(s, "@XX");
       while (p) {
         subst(p);
         p = strstr(s, "@XX");
         }
       outf << s << endl;
       }
    }

 outf.close();
 data.close();
 cout << "completed" << endl;
 return 0;
}

⌨️ 快捷键说明

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