示例#1
0
文件: tsh_cmd.c 项目: tony1223yu/tsh
int tsh_fg(int argc, char* argv[])
{
    if (argc < 2 || !argv[1] || (argv[1][0] != '%'))
    {
        fprintf(stderr, "Usage: fg %%<job>\n");
        return 0;
    }

    int jobID = atoi(&(argv[1][1]));
    if (jobID >= MAX_BG_JOB)
    {
        fprintf(stderr, "tsh: fg %%%d: no such job\n", jobID);
        return 0;
    }

    ProcessGroup* currGroup = backgroundGroup[jobID];
    if (currGroup == NULL)
        fprintf(stderr, "tsh: fg %%%d: no such job\n", jobID);
    else
    {
        int idxPID;
        for (idxPID = 0 ; idxPID < currGroup->proc_num ; idxPID ++)
        {
            int status = currGroup->status[idxPID];
            if ((currGroup->isRunning[idxPID] == 0) && WIFSTOPPED(currGroup->status[idxPID]))
            {
                currGroup->isRunning[idxPID] = 1;
                kill(currGroup->pids[idxPID], SIGCONT);
            }
            fprintf(stderr, "[%d]", jobID);
            fprintf(stderr, "\t%d\t", currGroup->pids[idxPID]);
            if (currGroup->isRunning[idxPID])
                fprintf(stderr, "running");
            else if (WIFEXITED(status))
                fprintf(stderr, "exited (%d)", WEXITSTATUS(status));
            else if (WIFSIGNALED(status))
                fprintf(stderr, "killed (%d)", WTERMSIG(status));
            else if (WIFSTOPPED(status))
                fprintf(stderr, "stopped (%d)", WSTOPSIG(status));
            fprintf(stderr, "\t\t%s\n", currGroup->cmdlines[idxPID]);
        }
        moveToForeground(currGroup);
        backgroundGroup[jobID] = NULL;
    }
    return 0;
}
//-----------------------------------------------------------------------------------------
bool GenericTextEditor::displayText(QString docName, QString text, QString extension, QString optionalData)
{
    // If there is no extra extension passed, then try to find the matching one based on the doc name
    ITextEditorCodecFactory* codecFactory;
    if(extension == "")    
        codecFactory = GenericTextEditor::findMatchingCodecFactory(docName);
    else
        codecFactory = GenericTextEditor::findMatchingCodecFactory(extension);

    if(codecFactory == 0)
        return false;

    GenericTextEditorDocument* document = 0;
    if(!isDocAlreadyShowing(docName, document) || isAllowDoubleDisplay())
    {
        document = new GenericTextEditorDocument(this);
        ITextEditorCodec* codec = codecFactory->create(document, docName);
        document->setCodec(codec);
        document->displayText(docName, text, optionalData);
        QMdiSubWindow *window = addSubWindow(document);
        window->setWindowIcon(QIcon(codec->getDocumentIcon()));
        document->showMaximized();
        QTabBar* tabBar = findChildren<QTabBar*>().at(0);
        tabBar->setTabToolTip(findChildren<QMdiSubWindow*>().size() - 1, docName);    
    }
    else
    {
        document->getCodec()->setOptionalData(optionalData);
        document->getCodec()->onDisplayRequest();
        setActiveSubWindow(qobject_cast<QMdiSubWindow*>(document->window()));
        document->setFocus(Qt::ActiveWindowFocusReason);
    }

    moveToForeground();

    connect(document, SIGNAL(textChanged()), document, SLOT(documentWasModified()));
    mActSave->setEnabled(false);

    return true;
}
//-----------------------------------------------------------------------------------------
bool GenericTextEditor::displayTextFromFile(QString filePath, QString optionalData)
{
    ITextEditorCodecFactory* codecFactory = GenericTextEditor::findMatchingCodecFactory(filePath);

    if(codecFactory == 0)
       return false;    
    
    GenericTextEditorDocument* document = 0;
    if(!isPathAlreadyShowing(filePath, document) || isAllowDoubleDisplay())
    {
        document = new GenericTextEditorDocument(this);
        ITextEditorCodec* codec = codecFactory->create(document, filePath);
        document->setCodec(codec);
        document->displayTextFromFile(QFile(filePath).fileName(), filePath, optionalData);
        QMdiSubWindow *window = addSubWindow(document);
        window->setWindowIcon(QIcon(codec->getDocumentIcon()));
        document->showMaximized();
        QTabBar* tabBar = findChildren<QTabBar*>().at(0);
        tabBar->setTabToolTip(findChildren<QMdiSubWindow*>().size() - 1, QFile(filePath).fileName());   
    }
    else
    {
        document->getCodec()->setOptionalData(optionalData);
        document->getCodec()->onDisplayRequest();
        setActiveSubWindow(qobject_cast<QMdiSubWindow*>(document->window()));
        document->setFocus(Qt::ActiveWindowFocusReason);
    }

    moveToForeground();   

    connect(document, SIGNAL(textChanged()), document, SLOT(documentWasModified()));
    
    mActSave->setEnabled(false);

    return true;
}