📄 pflowwin.cpp
字号:
(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 + -