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

📄 edbasic.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
                        linep = lforw(linep);                        loffs = 0;                } else {                        c = lgetc(linep, loffs);                        if (c>='a' && c<='z')                                lputc(linep, loffs, c-'a'+'A');                        ++loffs;                }        }        return (TRUE);  }/* * This routine figures out the * bounds of the region in the current window, and * fills in the fields of the "REGION" structure pointed * to by "rp". Because the dot and mark are usually very * close together, we scan outward from dot looking for * mark. This should save time. Return a standard code. * Callers of this routine should be prepared to get * an "ABORT" status; we might make this have the * conform thing later. */globle int getregion(REGION *rp){        register LINE   *flp;        register LINE   *blp;        long    fsize;        long    bsize;        if (curwp->w_markp == NULL) {                mlwrite("No mark set in this window");                return (FALSE);        }        if (curwp->w_dotp == curwp->w_markp) {                rp->r_linep = curwp->w_dotp;                if (curwp->w_doto < curwp->w_marko) {                        rp->r_offset = curwp->w_doto;                        rp->r_size = (long) (curwp->w_marko-curwp->w_doto);                } else {                        rp->r_offset = curwp->w_marko;                        rp->r_size = (long) (curwp->w_doto-curwp->w_marko);                }                return (TRUE);        }        blp = curwp->w_dotp;        bsize = (long) curwp->w_doto;        flp = curwp->w_dotp;        fsize = (long) (llength(flp)-curwp->w_doto+1);        while (flp!=curbp->b_linep || lback(blp)!=curbp->b_linep) {                if (flp != curbp->b_linep) {                        flp = lforw(flp);                        if (flp == curwp->w_markp) {                                rp->r_linep = curwp->w_dotp;                                rp->r_offset = curwp->w_doto;                                rp->r_size = fsize+curwp->w_marko;                                return (TRUE);                        }                        fsize += llength(flp)+1;                }                if (lback(blp) != curbp->b_linep) {                        blp = lback(blp);                        bsize += llength(blp)+1;                        if (blp == curwp->w_markp) {                                rp->r_linep = blp;                                rp->r_offset = curwp->w_marko;                                rp->r_size = bsize - curwp->w_marko;                                return (TRUE);                        }                }        }        mlwrite("Bug: lost mark");        return (FALSE);}/* ======================================================================= *                   HIGH LEVEL FILE I/O COMMANDS * ======================================================================= *//* * Read a file into the current * buffer. This is really easy; all you do it * find the name of the file, and call the standard * "read a file into the current buffer" code. * Bound to "C-X C-R". * * Changed calling code to "C-X C-V" to be * more like the Zmacs editor on Symbolics. CJC 7/28/86 */#if IBM_TBC#pragma argsused#endifgloble int fileread(  void *theEnv,  int f,  int n)  {   register int    s;   char            fname[NFILEN];   if ((s=mlreply(theEnv,"Visit file: ", fname, NFILEN)) != TRUE)     { return (s); }   return (readin(theEnv,fname));  }/* * Select a file for editing. * Look around to see if you can find the * fine in another buffer; if you can find it * just switch to the buffer. If you cannot find * the file, create a new buffer, read in the * text, and switch to the new buffer. * Bound to C-X C-V. * * Changed calling code to "C-X C-F" (Find File) to be * more like the Zmacs editor on Symbolics. CJC 7/28/86 */#if IBM_TBC#pragma argsused#endifgloble int filevisit(  void *theEnv,  int f,  int n)  {        register int    s;        char            fname[NFILEN];        if ((s=mlreply(theEnv,"Find file: ", fname, NFILEN)) != TRUE)                return (s);	filevisit_guts(theEnv,fname);	return(TRUE);  }globle int filevisit_guts(  void *theEnv,  char fname[]){        register BUFFER *bp;        register WINDOW *wp;        register LINE   *lp;        register int    i;        register int    s;        char            bname[NBUFN];        for (bp=bheadp; bp!=NULL; bp=bp->b_bufp) {                if ((bp->b_flag&BFTEMP)==0 && strcmp(bp->b_fname, fname)==0) {                        if (--curbp->b_nwnd == 0) {                                curbp->b_dotp  = curwp->w_dotp;                                curbp->b_doto  = curwp->w_doto;                                curbp->b_markp = curwp->w_markp;                                curbp->b_marko = curwp->w_marko;                        }                        curbp = bp;                        curwp->w_bufp  = bp;                        if (bp->b_nwnd++ == 0) {                                curwp->w_dotp  = bp->b_dotp;                                curwp->w_doto  = bp->b_doto;                                curwp->w_markp = bp->b_markp;                                curwp->w_marko = bp->b_marko;                        } else {                                wp = wheadp;                                while (wp != NULL) {                                        if (wp!=curwp && wp->w_bufp==bp) {                                                curwp->w_dotp  = wp->w_dotp;                                                curwp->w_doto  = wp->w_doto;                                                curwp->w_markp = wp->w_markp;                                                curwp->w_marko = wp->w_marko;                                                break;                                        }                                        wp = wp->w_wndp;                                }                        }                        lp = curwp->w_dotp;                        i = curwp->w_ntrows/2;                        while (i-- && lback(lp)!=curbp->b_linep)                                lp = lback(lp);                        curwp->w_linep = lp;                        curwp->w_flag |= WFMODE|WFHARD;                        mlwrite("[Old buffer]");                        return (TRUE);                }        }        makename(bname, fname);                 /* New buffer name.     */        while ((bp=bfind(theEnv,bname, FALSE, 0)) != NULL) {                s = mlreply(theEnv,"Buffer name: ", bname, NBUFN);                if (s == ABORT)                 /* ^G to just quit      */                        return (s);                if (s == FALSE) {               /* CR to clobber it     */                        makename(bname, fname);                        break;                }        }        if (bp==NULL && (bp=bfind(theEnv,bname, TRUE, 0))==NULL) {                mlwrite("Cannot create buffer");                return (FALSE);        }        if (--curbp->b_nwnd == 0) {             /* Undisplay.           */                curbp->b_dotp = curwp->w_dotp;                curbp->b_doto = curwp->w_doto;                curbp->b_markp = curwp->w_markp;                curbp->b_marko = curwp->w_marko;        }        genstrcpy(lastbufn, curbp->b_bname);       /* Set last buufer name */        curbp = bp;                             /* Switch to it.        */        curwp->w_bufp = bp;        curbp->b_nwnd++;        return (readin(theEnv,fname));                 /* Read it in.          */}/* * Read file "fname" into the current * buffer, blowing away any text found there. Called * by both the read and visit commands. Return the final * status of the read. Also called by the mainline, * to read in a file specified on the command line as * an argument. */globle int readin(  void *theEnv,  char    fname[]){        register LINE   *lp1;        register LINE   *lp2;        register int    i;        register WINDOW *wp;        register BUFFER *bp;        register int    s;        register int    nbytes;        register int    nline;        char            line[NLINE];        bp = curbp;                             /* Cheap.               */        if ((s=bclear(theEnv,bp)) != TRUE)             /* Might be old.        */                return (s);        bp->b_flag &= ~(BFTEMP|BFCHG);        genstrcpy(bp->b_fname, fname);        if ((s=ffropen(fname)) == FIOERR)       /* Hard file open.      */                goto out;        if (s == FIOFNF) {                      /* File not found.      */                mlwrite("[New file]");                goto out;        }        mlwrite("[Reading file]");        nline = 0;        while ((s=ffgetline(line, NLINE)) == FIOSUC) {                nbytes = strlen(line);                if ((lp1=lalloc(theEnv,nbytes)) == NULL) {                        s = FIOERR;             /* Keep message on the  */                        break;                  /* display.             */                }                lp2 = lback(curbp->b_linep);                lp2->l_fp = lp1;                lp1->l_fp = curbp->b_linep;                lp1->l_bp = lp2;                curbp->b_linep->l_bp = lp1;                for (i=0; i<nbytes; ++i)                        lputc(lp1, i, line[i]);                ++nline;        }        ffclose();                              /* Ignore errors.       */        if (s == FIOEOF) {                      /* Don't zap message!   */                if (nline == 1)                        mlwrite("[Read 1 line]");                else                        mlwrite("[Read %d lines]", nline);        }out:        for (wp=wheadp; wp!=NULL; wp=wp->w_wndp) {                if (wp->w_bufp == curbp) {                        wp->w_linep = lforw(curbp->b_linep);                        wp->w_dotp  = lforw(curbp->b_linep);                        wp->w_doto  = 0;                        wp->w_markp = NULL;                        wp->w_marko = 0;                        wp->w_flag |= WFMODE|WFHARD;                }        }        if (s == FIOERR)                        /* False if error.      */                return (FALSE);        return (TRUE);}/* * Take a file name, and from it * fabricate a buffer name. This routine knows * about the syntax of file names on the target system. * I suppose that this information could be put in * a better place than a line of code. */globle int makename(char    bname[],char    fname[]){        register char   *cp1;        register char   *cp2;        cp1 = &fname[0];        while (*cp1 != 0)                ++cp1;#if     VAX_VMS        while (cp1!=&fname[0] && cp1[-1]!=':' && cp1[-1]!=']')                --cp1;#endif#if     IBM_MSC || IBM_TBC || IBM_GCC        while (cp1!=&fname[0] && cp1[-1]!=':' && cp1[-1]!='\\')                --cp1;#endif#if     UNIX_7 || UNIX_V        while (cp1!=&fname[0] && cp1[-1]!='/')                --cp1;#endif        cp2 = &bname[0];        while (cp2!=&bname[NBUFN-1] && *cp1!=0 && *cp1!=';')                *cp2++ = *cp1++;        *cp2 = 0;	return(TRUE);}/* * Ask for a file name, and write the * contents of the current buffer to that file. * Update the remembered file name and clear the * buffer changed flag. This handling of file names * is different from the earlier versions, and * is more compatable with Gosling EMACS than * with ITS EMACS. Bound to "C-X C-W". * * Modified to allow current file name as default. CJC 7/28/86 */#if IBM_TBC#pragma argsused#endifgloble int filewrite(  void *theEnv,  int f,  int n)  {        register WINDOW *wp;        register int    s;        char            fname[NFILEN];        char            prompt[NFILEN + 15];        gensprintf(prompt,"Write file [%s]: ",curbp->b_fname);        if ((s=mlreply(theEnv,prompt, fname, NFILEN)) != TRUE) {                if (s == FALSE)                   genstrcpy(fname, curbp->b_fname);                else                   return (s);                }        if ((s=writeout(fname)) == TRUE) {                genstrcpy(curbp->b_fname, fname);                curbp->b_flag &= ~BFCHG;                wp = wheadp;                    /* Update mode lines.   */                while (wp != NULL) {                        if (wp->w_bufp == curbp)                                wp->w_flag |= WFMODE;                        wp = wp->w_wndp;                }        }        return (s);  }/* * Save the contents of the current * buffer in its associatd file. Do nothing * if nothing has changed (this may be a bug, not a * feature). Error if there is no remembered file * name for the buffer. Bound to "C-X C-S". May * get called by "C-Z". */#if IBM_TBC#pragma argsused#endifgloble int filesave(  void *theEnv,  int f,  int n)  {        register WINDOW *wp;        register int    s;        if ((curbp->b_flag&BFCHG) == 0)         /* Return, no changes.  */                return (TRUE);        if (curbp->b_fname[0] == 0) {           /* Must have a name.    */                mlwrite("No file name");                return (FALSE);        }        if ((s=writeout(curbp->b_fname)) == TRUE) {                curbp->b_flag &= ~BFCHG;                wp = wheadp;                    /* Update mode lines.   */                while (wp != NULL) {                        if (wp->w_bufp == curbp)                                wp->w_flag |= WFMODE;                        wp = wp->w_wndp;                }        }        return (s);  }/* * This function performs the details of file * writing. Uses the file management routines in the * "fileio.c" package. The number of lines written is * displayed. Sadly, it looks inside a LINE; provide * a macro for this. Most of the grief is error * checking of some sort. */globle int writeout(char    *fn){        register int    s;        register LINE   *lp;        register int    nline;        if ((s=ffwopen(fn)) != FIOSUC)          /* Open writes message. */                return (FALSE);        lp = lforw(curbp->b_linep);             /* First line.          */        nline = 0;                              /* Number of lines.     */        while (lp != curbp->b_linep) {                if ((s=ffputline(&lp->l_text[0], llength(lp))) != FIOSUC)                        break;                ++nline;                lp = lforw(lp);        }        if (s == FIOSUC) {                      /* No write error.      */                s = ffclose();                if (s == FIOSUC) {              /* No close error.      */                        if (nline == 1)                                mlwrite("[Wrote 1 line]");                        else                                mlwrite("[Wrote %d lines]", nline);                }

⌨️ 快捷键说明

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