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

📄 edmisc.c

📁 NASA 开发使用的一个专家系统
💻 C
📖 第 1 页 / 共 4 页
字号:
            if((c ==' ')||(c == 'y')||(c == 'Y'))               {                 lreplace(pat2);                 clp = curwp->w_dotp;                 cbo = curwp->w_doto;	       }	     else if ((c == 'n')||(c == 'N'))		 cbo = tbo;	     else		return(TRUE);           }       }     }     curwp->w_flag |= WFMOVE;     curwp->w_doto -= strlen(pat);     update();     mlwrite("No more occurrences of [%s] in buffer",pat2);     genfree((VOID *) pat2,(unsigned) strlen(pat) + 1);     return(TRUE);}/*************************************************** *    Replace old string with new string           * ***************************************************/globle int lreplace(pat2)char *pat2;{      int doto,i;      char *cp1,*cp2;      LINE *lp1,*lp2;      WINDOW *wp;     lchange(WFEDIT);     lp1 = curwp->w_dotp;     doto = curwp->w_doto;     if((lp2 =lalloc((int) (lp1->l_used - strlen(pat2) + strlen(pat) ))) == NULL)          return(FALSE);     cp1 = &lp1->l_text[0];     cp2 = &lp2->l_text[0];   /* Copy first part of line which is containing old string to new line */     while(cp1 != &lp1->l_text[doto])          *cp2++ = *cp1++;     /* reseve space for new string in new line */     cp2 += strlen(pat);     cp1 += strlen(pat2);  /* Copy third part of line which is containing old string to new line */     while (cp1 != &lp1->l_text[lp1->l_used])          *cp2++ = *cp1++;     *cp2 = *cp1;     /* Rearrange pointer, insert new line  and delete old line */     lp1->l_bp->l_fp = lp2;     lp2->l_fp = lp1->l_fp;     lp1->l_fp->l_bp = lp2;     lp2->l_bp = lp1->l_bp;     /* copy the new string in to new line */     for(i=0;i<strlen(pat);i++)          lp2->l_text[doto + i] = pat[i];     /* Up-date current pointers and values */     curwp->w_doto += strlen(pat2);     wp = wheadp;     while (wp != NULL)     {  if (wp->w_linep == lp1)             wp->w_linep = lp2;	if(wp->w_dotp == lp1)               wp->w_dotp = lp2;	if (wp == curwp)               wp->w_doto += (strlen(pat) - strlen(pat2));	if(wp->w_markp ==lp1)             {               wp->w_markp = lp2;               wp->w_marko += (strlen(pat) - strlen(pat2));             }        wp = wp->w_wndp;     }     genfree((VOID *) lp1,(unsigned) sizeof(LINE) + lp1->l_size);     return(TRUE);}/******************************************************** * This function will search for the matching bracket   * * of any bracket                                       * * It is currently bounded to C-X-^                     * ********************************************************/#if IBM_TBC#pragma argsused#endifgloble int smatchb(f,n)int f,n;{     int cbo,c;     LINE *clp;     clp = curwp->w_dotp;     cbo = curwp->w_doto;     c = lgetc(clp,cbo);     if((c == '{')||(c == '(')||(c=='['))     {     /*  search forward for matched closing bracket '}'  */          if(searchcl(c) == FALSE)            return(FALSE);     }     else if((c == '}')||(c == ')')||(c == ']'))     {     /* search backward for matched opening bracket '{'*/          if(searchop(c) == FALSE)            return(FALSE);     }     else          return(FALSE);     curwp->w_flag |= WFMOVE;     return(TRUE);}/*************************************************** * This function will search for closing bracket,  * * including '}' , ')' , ']'                       * *************************************************** * The mechanism of this function is it will check * * every character of the file from the current    * * position down and increase i by 1 every time it * * find an openning bracket and decrease i by 1    * * every time it find a closing bracket.When i = 0 * * the matching bracket is found.                  * ***************************************************/globle int searchcl(tempch)int tempch;{     LINE *lp;     int tbo,c,i=1;     lp = curwp->w_dotp;     tbo = curwp->w_doto + 1;     while(i > 0)     {          if(lp == curbp->b_linep)          {            mlwrite("Matched bracket is not found");            return(FALSE);          }          if(tbo== llength(lp))          {            lp = lforw(lp);            tbo = 0;            c = '\n';          }          else            c = lgetc(lp,tbo++);          switch(tempch)          {            case '{':               if (c == '{')                 i++;               else if (c =='}')                 i--;               break;            case '(':               if (c == '(')                 i++;               else if (c ==')')                 i--;               break;            case '[':               if (c == '[')                i++;               else if (c ==']')                i--;               break;         }     }     curwp->w_dotp = lp;     curwp->w_doto = tbo - 1;     return(TRUE);}/************************************************************** * This function will search backward for the opening bracket,* * including '{' , '(' , '[' .                                * ************************************************************** * The mechanism of this function is similiar to the searchcl,* * except that it will go through the file backward           * **************************************************************/globle int searchop(tempch)int tempch;{     LINE *lp;     int tbo,c,i=1;     lp = curwp->w_dotp;     tbo = curwp->w_doto;     while(i>0)     {          if(tbo == 0)          {            lp = lback(lp);            if(lp == curbp->b_linep)            {                 mlwrite("matched bracket is not found");                 return(FALSE);            }            tbo = llength(lp) + 1;          }          if(--tbo == llength(lp))            c = '\n';          else            c = lgetc(lp,tbo);          switch(tempch)          {             case '}':               if(c == '}')                 i++;               else if (c == '{')                 i--;               break;            case ')':               if (c == ')')                 i++;               else if (c =='(')                 i--;               break;            case ']':               if (c == ']')                i++;               else if (c =='[')                 i--;               break;          }     }     curwp->w_dotp = lp;     curwp->w_doto = tbo ;     return(TRUE);}/* * Read a pattern. Stash it in the external variable "pat". The "pat" is not * updated if the user types in an empty line. If the user typed an empty line, * and there is no old pattern, it is an error. Display the old pattern, in the * style of Jeff Lomicka. There is some do-it-yourself control expansion. */globle int readpattern(prompt)    char *prompt;    {    register char *cp1;    register char *cp2;    register int c;    register int s;    char tpat[NPAT+20];    cp1 = &tpat[0];                     /* Copy prompt */    cp2 = prompt;    while ((c = *cp2++) != '\0')        *cp1++ = (char) c;    if (pat[0] != '\0')                 /* Old pattern */        {        *cp1++ = ' ';        *cp1++ = '[';        cp2 = &pat[0];        while ((c = *cp2++) != 0)            {            if (cp1 < &tpat[NPAT+20-6]) /* "??]: \0" */                {                if (c<0x20 || c==0x7F) {                    *cp1++ = '^';                    c ^= 0x40;                    }                else if (c == '%')      /* Map "%" to */                    *cp1++ = (char) c;         /* "%%". */                *cp1++ = (char) c;                }            }        *cp1++ = ']';        }    *cp1++ = ':';                       /* Finish prompt */    *cp1++ = ' ';    *cp1++ = '\0';    s = mlreply(tpat, tpat, NPAT);      /* Read pattern */    if (s == TRUE)                      /* Specified */        strcpy(pat, tpat);    else if (s == FALSE && pat[0] != 0)         /* CR, but old one */        s = TRUE;    return (s);    }/* ========================================================================= *                             SPAWN FUNCTIONS * ========================================================================= *//* * The routines in this section are called to create a subjob running a * command interpreter. *//* * Create a subjob with a copy of the command intrepreter in it. When the * command interpreter exits, mark the screen as garbage so that you do a full * repaint. Bound to "C-C". The message at the start in VMS puts out a newline. * Under some (unknown) condition, you don't get one free when DCL starts up. */#if IBM_TBC#pragma argsused#endifgloble int spawncli(f, n)int f,n;{#if     UNIX_7 || UNIX_V || IBM_MSC || IBM_TBC || IBM_ZTC || IBM_ICB || IBM_SC || IBM_GCC        register char *cp;#if ! ANSI_COMPILER        char    *getenv();#endif#endif	#if     VAX_VMS        movecursor(term.t_nrow, 0);             /* In last line.        */        mlputs("[Starting DCL]\r\n");        (*term.t_flush)();                      /* Ignore "ttcol".      */        sgarbf = TRUE;        return (sys(NULL));                     /* NULL => DCL.         */#endif#if     IBM_MSC || IBM_TBC || IBM_ZTC || IBM_ICB || IBM_SC || IBM_GCC        cp = getenv("COMSPEC");        if (cp == NULL)          return(TRUE);        movecursor(term.t_nrow, 0);             /* Seek to last line.   */        (*term.t_flush)();        system(cp);                /* Run CLI.             */        sgarbf = TRUE;        return(TRUE);#endif#if     UNIX_7 || UNIX_V        movecursor(term.t_nrow, 0);             /* Seek to last line.   */        (*term.t_flush)();        ttclose();                              /* stty to old settings */        if ((cp = getenv("SHELL")) != NULL && *cp != '\0')                system(cp);        else                system("exec /bin/sh");        sgarbf = TRUE;        sleep(2);        ttopen();        return(TRUE);#endif}/* * Run a one-liner in a subjob. When the command returns, wait for a single * character to be typed, then mark the screen as garbage so a full repaint is * done. Bound to "C-X !". */#if IBM_TBC#pragma argsused#endifgloble int spawn(f, n)int f,n;{        register int    s;        char            line[NLINE];#if     VAX_VMS        if ((s=mlreply("DCL command: ", line, NLINE)) != TRUE)                return (s);        (*term.t_putchar)('\n');                /* Already have '\r'    */        (*term.t_flush)();        s = sys(line);                          /* Run the command.     */        mlputs("\r\n\n[End]");                  /* Pause.               */        (*term.t_flush)();        while ((*term.t_getchar)() != '\r')                ;        sgarbf = TRUE;        return (s);#endif#if     IBM_MSC || IBM_TBC || IBM_ZTC || IBM_ICB || IBM_SC || IBM_GCC        if ((s=mlreply("MS-DOS command: ", line, NLINE)) != TRUE)                return (s);        system(line);        mlwrite("Hit any key to continue");        (*term.t_getchar)();                 /* Pause.               */        sgarbf = TRUE;        return (TRUE);#endif#if     UNIX_7 || UNIX_V        if ((s=mlreply("! ", line, NLINE)) != TRUE)                return (s);        (*term.t_putchar)('\n');                /* Already have '\r'    */        (*term.t_flush)();        ttclose();                              /* stty to old modes    */        system(line);        sleep(2);        ttopen();        mlputs("[End]");                        /* Pause.               */        (*term.t_flush)();        while ((s = (*term.t_getchar)()) != '\r' && s != ' ')                ;        sgarbf = TRUE;        return (TRUE);#endif}#if     VAX_VMS/* * Run a command. The "cmd" is a pointer to a command string, or NULL if you * want to run a copy of DCL in the subjob (this is how the standard routine * LIB$SPAWN works. You have to do wierd stuff with the terminal on the way in * and the way out, because DCL does not want the channel to be in raw mode. */globle int sys(cmd)char   *cmd;{        struct  dsc$descriptor  cdsc;        struct  dsc$descriptor  *cdscp;        long    status;        long    substatus;        long    iosb[2];        status = SYS$QIOW(EFN, iochan, IO$_SETMODE, iosb, 0, 0,                          oldmode, sizeof(oldmode), 0, 0, 0, 0);        if (status!=SS$_NORMAL || (iosb[0]&0xFFFF)!=SS$_NORMAL)                return (FALSE);        cdscp = NULL;                           /* Assume DCL.          */        if (cmd != NULL) {                      /* Build descriptor.    */                cdsc.dsc$a_pointer = cmd;                cdsc.dsc$w_length  = strlen(cmd);                cdsc.dsc$b_dtype   = DSC$K_DTYPE_T;                cdsc.dsc$b_class   = DSC$K_CLASS_S;                cdscp = &cdsc;        }        status = LIB$SPAWN(cdscp, 0, 0, 0, 0, 0, &substatus, 0, 0, 0);        if (status != SS$_NORMAL)                substatus = status;        status = SYS$QIOW(EFN, iochan, IO$_SETMODE, iosb, 0, 0,                          newmode, sizeof(newmode), 0, 0, 0, 0);        if (status!=SS$_NORMAL || (iosb[0]&0xFFFF)!=SS$_NORMAL)                return (FALSE);        if ((substatus&STS$M_SUCCESS) == 0)     /* Command failed.      */                return (FALSE);        return (TRUE);}#endif#endif

⌨️ 快捷键说明

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