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

📄 pflowwin.cpp

📁 用于电力系统潮流计算 c++程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                (string=strstr(Buffer,".BAT"))!=NULL ) {
          printf("%s",Buffer);
          string=strchr(string,' ');
          string[strlen(string)-1]='\0';
          strcpy(Options,&string[1]);
          GetArguments(Options,"BATCH");
          for (i=0; i<strlen(Buffer); i++) {
            if (Buffer[i]!='.') string[i]=Buffer[i];
            else { string[i]='\0'; break; }
          }
          if (spawnvp(P_WAIT,string,Argv)==-1) {
            StatusBar->SetText("Problems with Batch file");
          }
        }
#endif
        else printf("%s",Buffer);
      }
    }
    printf("\nEND of batch/script file\n");
    Invalidate();
    UpdateWindow();
    fclose(InputFile);
  }
}

// Define command line arguments Argc and Argv
void PflowWindow::GetArguments(char *Line,char *Program)
{
  int i,j,k;
  char string[200];
  BOOL FirstBlank=TRUE;

  if (Argc!=0) {
    for(i=0;i<=Argc;i++) delete[] Argv[i];
    delete[] Argv;
    Argc=0;
  }
  i=0;
  while(Line[i]!='\0') {
    if (Line[i]!=' ' && FirstBlank) {
      Argc++;
      FirstBlank=FALSE;
    }
    else if (Line[i]==' ') FirstBlank=TRUE;
    i++;
  }
  if (Argc!=0) {
    Argc++;
    Argv = new char* [Argc+1];
    Argv[0]=new char [strlen(Program)+1];
    strcpy(Argv[0],Program);
    Argv[Argc]=NULL;
    FirstBlank=TRUE;
    for(i=k=0,j=1;;i++) {
     if (Line[i]!=' ' && Line[i]!='\0') {
       string[k]=Line[i];
       k++;
       FirstBlank=FALSE;
     } else {
       if (!FirstBlank) {
         string[k]='\0';
         k++;
         Argv[j]=new char [k];
         if (string[0]=='<' || string[0]=='>') strcpy(Argv[j],&string[1]);
         else strcpy(Argv[j],string);
         j++;
         FirstBlank=TRUE;
       }
       k=0;
     }
     if (Line[i]=='\0') break;
    }
  }
}


// UWPflow Help
void PflowWindow::CmHelp()
{
  /*
  char Help[100],*string;

  string=getenv("UWPFLOW");
  if (string!=NULL) {
    strcpy(Help,string);
    if (Help[strlen(Help)-1]=='\\') strcat(Help,"pfwhelp.hlp");
    else strcat(Help,"\\pfwhelp.hlp");
  } else {
    MessageBox("Unable to find UWPFLOW DOS environment variable.  Program might have problems finding the HELP file.  Set UWPFLOW variable to the program path in AUTOEXEC.BAT and restart your computer.", "Help Warning", MB_OK | MB_ICONEXCLAMATION);
    strcpy(Help,"pfwhelp.hlp");
  }
  WinHelp(Help,HELP_INDEX,0);
  */
  WinHelp("pfwhelp.hlp",HELP_INDEX,0);
}


// Run UWPflow
void PflowWindow::CmRun()
{
  int i;

  if(Argc!=0) {
    if (CountRuns!=0 || Screen!=NULL) {
      printf("\n");
      for (i=1; i<BUFFER-1; i++) printf("%c",'-'); printf("\n");
    }
    printf("RUN #%d: ",++CountRuns);
    for(i=0; i<Argc; i++) printf("%s ",Argv[i]);
    printf("\n");
    Invalidate();
    UpdateWindow();
    // Make sure not to leave hint text dangling
    StatusBar->SetText("Press [Esc] to stop processing");
    ControlBar->SetHintCommand(-1);
    Frame->UpdateWindow();
    pfw_main();
    printf("\n END OF RUN #%d\n",CountRuns);
    Invalidate();
    UpdateWindow();
    fclose(stdout);
    strcpy(stdout->Name,"");
    stdout->Screen=1;
    fclose(stderr);
    strcpy(stderr->Name,"");
    stderr->Screen=1;
    fclose(stdin);
    strcpy(stdin->Name,"");
    stdin->Screen=0;
  }
}

// Clear window
void PflowWindow::CmClearScreen()
{
  ScreenType *TmpPtr,*NextPtr;

  if (CanClose()) {
    for (TmpPtr=ScreenBegin;TmpPtr!=NULL;) {
      NextPtr=TmpPtr->Next;
      delete[] TmpPtr->Line;
      delete TmpPtr;
      TmpPtr=NextPtr;
    }
    Invalidate();
    ScreenBegin=ScreenEnd=Screen=NULL;
    NewLine=TRUE;
    IsDirty=FALSE;
    IsNewFile = TRUE;
    NumberLines=TotalNumberLines=1;
    CountRuns=0;
    FirstScreen=TRUE;
    yRange=10;
    Scroller->SetRange(xRange,yRange);
    Scroller->ScrollTo(0,0);
  }
}

// Paints the screen and scrolls down to the last line
void PflowWindow::Paint(TDC& dc, BOOL, TRect&)
{
  ScreenType *TmpPtr;
  int y=0,dy,i,count=0;
  TEXTMETRIC tm;

  // Printing:
  dc.SelectObject(*MyFont);
  dc.GetTextMetrics(tm);
  dy=tm.tmHeight;
  for (TmpPtr=Screen; TmpPtr!=NULL; TmpPtr=TmpPtr->Next) {
    dc.TextOut(0,y,TmpPtr->Line);
    y += dy;
  }

  // Scrolling:
  if (TotalNumberLines<=MAXLINES || NumberLines == MAXLINES) {
    if (NumberLines>SCROLL) {
      while (NumberLines>SCROLL) {
        NumberLines=NumberLines-SCROLL;
        yRange=yRange+dyRange;
        count++;
      }
      Scroller->SetRange(xRange,yRange);
      for (i=1; i<=count; i++) {
        if (FirstScreen) {
          FirstScreen=FALSE;
          Scroller->ScrollBy(0,SCROLL-1);
        } else Scroller->ScrollBy(0,SCROLL);
      }
    }
    if (NumberLines<=0) NumberLines=1;
  } else NumberLines=1;

}


void PflowWindow::CmFileOpen()
{
  if (CanClose())
    if ((TFileOpenDialog(this, *LogFileData)).Execute() == IDOK) OpenFile();
}

void PflowWindow::CmFileSave()
{
  if (IsNewFile) CmFileSaveAs();
  else           SaveFile();
}

void PflowWindow::CmFileSaveAs()
{
  if (IsNewFile) strcpy(LogFileData->FileName, "");

  if ((TFileSaveDialog(this, *LogFileData)).Execute() == IDOK) SaveFile();
}

void PflowWindow::CmEdit()
{
  if ((TFileOpenDialog(this, *DataFileData)).Execute() == IDOK) {
    if (spawnlp(P_NOWAIT,"notepad.exe","",DataFileData->FileName,NULL)==-1) {
      StatusBar->SetText("Problems with Notepad/WordPad");
    }
  }
}

void PflowWindow::CmAbout()
{
  TDialog(this, IDD_ABOUT).Execute();
}

void PflowWindow::SaveFile()
{
  ScreenType *TmpPtr;
  ofstream os;

  os.open(LogFileData->FileName,ios::out);
  if (!os)
    MessageBox("Unable to open file", "File Error", MB_OK | MB_ICONEXCLAMATION);
  else {
    // Saves the Screen lines in file
    for (TmpPtr=ScreenBegin;TmpPtr!=NULL;TmpPtr=TmpPtr->Next)
      os << TmpPtr->Line << '\n';

    // Set new file and screen indicators to FALSE.
    IsNewFile = IsDirty = FALSE;
  }
  os.close();
}

void PflowWindow::OpenFile()
{
  ScreenType *NewPtr;
  char Buffer[BUFFER];
  FILE *InputFile;

  InputFile=fopen(LogFileData->FileName,"r");
  if (InputFile==NULL)
    MessageBox("Unable to open file", "File Error", MB_OK | MB_ICONEXCLAMATION);
  else {
    CmClearScreen();
    while (fgets(Buffer,BUFFER,InputFile)!=NULL) {
      NewPtr = new ScreenType;
      NewPtr->Line = new char[strlen(Buffer)+1];
      strcpy(NewPtr->Line,Buffer);
      NewPtr->Line[strlen(Buffer)-1]='\0';
      NewPtr->Next = NULL;
      if (ScreenBegin==NULL)
        ScreenBegin = ScreenEnd = Screen = NewPtr;
      else {
        if (TotalNumberLines>MAXLINES) Screen=Screen->Next;
        ScreenEnd->Next = NewPtr;
        ScreenEnd = NewPtr;
      }
      TotalNumberLines++;
      if (TotalNumberLines>MAXLINES) NumberLines=MAXLINES;
      else NumberLines=TotalNumberLines;
    }
    Invalidate();
    UpdateWindow();
  }
  fclose(InputFile);

}

class PflowApp : public TApplication {
  public:
    PflowApp() : TApplication() {}

    void InitMainWindow();
};

void PflowApp::InitMainWindow()
{
  // Construct the decorated Frame window
  Frame = new TDecoratedFrame(0, "UWPflow", new PflowWindow, TRUE);

  // Construct a status bar
  StatusBar = new TStatusBar(Frame, TGadget::Embossed);

  // Construct a control bar
  ControlBar = new TControlBar(Frame);
  ControlBar->Insert(*new TButtonGadget(CM_CLEARSCREEN, CM_CLEARSCREEN, TButtonGadget::Command));
  ControlBar->Insert(*new TSeparatorGadget);
  ControlBar->Insert(*new TButtonGadget(CM_FILEOPEN, CM_FILEOPEN, TButtonGadget::Command));
  ControlBar->Insert(*new TButtonGadget(CM_FILESAVE, CM_FILESAVE, TButtonGadget::Command));
  ControlBar->Insert(*new TButtonGadget(CM_FILESAVEAS, CM_FILESAVEAS, TButtonGadget::Command));
  ControlBar->Insert(*new TSeparatorGadget);
  ControlBar->Insert(*new TButtonGadget(CM_EDIT, CM_EDIT, TButtonGadget::Command));
  ControlBar->Insert(*new TSeparatorGadget);
  ControlBar->Insert(*new TButtonGadget(CM_COMMANDLINE, CM_COMMANDLINE, TButtonGadget::Command));
  ControlBar->Insert(*new TButtonGadget(CM_RUN, CM_RUN, TButtonGadget::Command));
  ControlBar->Insert(*new TButtonGadget(CM_BATCH, CM_BATCH, TButtonGadget::Command));
  ControlBar->Insert(*new TSeparatorGadget);
  ControlBar->Insert(*new TButtonGadget(CM_ABOUT, CM_ABOUT, TButtonGadget::Command));
  ControlBar->Insert(*new TButtonGadget(CM_HELP, CM_HELP, TButtonGadget::Command));

  ControlBar->SetHintMode(TGadgetWindow::EnterHints);

  // Insert the status bar and control bar into the Frame
  Frame->Insert(*StatusBar, TDecoratedFrame::Bottom);
  Frame->Insert(*ControlBar, TDecoratedFrame::Top);

  // Set the main window and its menu
  SetMainWindow(Frame);
  GetMainWindow()->AssignMenu("COMMANDS");

  // Assign ICON to this application.
  Frame->SetIcon(this, IDI_PFLOW);
#ifdef WIN95
  Frame->SetIconSm(this, IDI_PFLOW);
#endif
}

int OwlMain(int /*argc*/, char* /*argv*/ [])
{
  return PflowApp().Run();
}



⌨️ 快捷键说明

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