Annotation of 43BSDReno/contrib/jove/misc.c, revision 1.1

1.1     ! root        1: /***************************************************************************
        !             2:  * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne.  JOVE *
        !             3:  * is provided to you without charge, and with no warranty.  You may give  *
        !             4:  * away copies of JOVE, including sources, provided that this notice is    *
        !             5:  * included in all the files.                                              *
        !             6:  ***************************************************************************/
        !             7: 
        !             8: #include "jove.h"
        !             9: #include "ctype.h"
        !            10: #include "disp.h"
        !            11: 
        !            12: #include <signal.h>
        !            13: 
        !            14: void
        !            15: prCTIME()
        !            16: {
        !            17:        s_mess(": %f %s", get_time((time_t *) 0, (char *) 0, 0, -1));
        !            18: }
        !            19: 
        !            20: void
        !            21: ChrToOct()
        !            22: {
        !            23:        int     c,
        !            24:                slow = NO;
        !            25: 
        !            26:        c = waitchar(&slow);
        !            27:        ins_str(sprint("\\%03o", c), NO);
        !            28: }
        !            29: 
        !            30: void
        !            31: StrLength()
        !            32: {
        !            33:        static char     inquotes[] = "Where are the quotes?";
        !            34:        char    *first = StrIndex(-1, linebuf, curchar, '"'),
        !            35:                *last = StrIndex(1, linebuf, curchar + 1, '"'),
        !            36:                c;
        !            37:        int     numchars = 0;
        !            38: 
        !            39:        if (first == 0 || last == 0)
        !            40:                complain(inquotes);
        !            41:        first += 1;
        !            42:        while (first < last) {
        !            43:                c = *first++;
        !            44:                if (c == '\\') {
        !            45:                        int     num;
        !            46: 
        !            47:                        if (!isdigit(*first))
        !            48:                                first += 1;
        !            49:                        else {
        !            50:                                num = 3;
        !            51:                                while (num-- && isdigit(*first++) && first < last)
        !            52:                                        ;
        !            53:                        }
        !            54:                }
        !            55:                numchars += 1;
        !            56:        }
        !            57:        s_mess("%d characters", numchars);
        !            58: }
        !            59: 
        !            60: /* Transpos cur_char with cur_char - 1 */
        !            61: 
        !            62: void
        !            63: TransChar()
        !            64: {
        !            65:        char    before;
        !            66: 
        !            67:        if (curchar == 0 || (eolp() && curchar == 1))
        !            68:                complain((char *) 0);   /* BEEP */
        !            69:        if (eolp())
        !            70:                b_char(1);
        !            71:        before = linebuf[curchar - 1];
        !            72:        del_char(BACKWARD, 1, NO);
        !            73:        f_char(1);
        !            74:        insert_c(before, 1);
        !            75: }
        !            76: 
        !            77: /* Switch current line with previous one */
        !            78: 
        !            79: void
        !            80: TransLines()
        !            81: {
        !            82:        daddr   old_prev;
        !            83: 
        !            84:        if (firstp(curline))
        !            85:                return;
        !            86:        lsave();
        !            87:        old_prev = curline->l_prev->l_dline;
        !            88:        curline->l_prev->l_dline = curline->l_dline;
        !            89:        curline->l_dline = old_prev;
        !            90:        getDOT();
        !            91:        if (!lastp(curline))
        !            92:                line_move(FORWARD, 1, NO);
        !            93:        modify();
        !            94: }
        !            95: 
        !            96: void
        !            97: Leave()
        !            98: {
        !            99:        longjmp(mainjmp, QUIT);
        !           100: }
        !           101: 
        !           102: /* If argument is specified, kill that many lines down.  Otherwise,
        !           103:    if we "appear" to be at the end of a line, i.e. everything to the
        !           104:    right of the cursor is white space, we delete the line separator
        !           105:    as if we were at the end of the line. */
        !           106: 
        !           107: void
        !           108: KillEOL()
        !           109: {
        !           110:        Line    *line2;
        !           111:        int     char2;
        !           112:        int     num = arg_value();
        !           113: 
        !           114:        if (is_an_arg()) {
        !           115:                if (num == 0) { /* Kill to beginning of line */
        !           116:                        line2 = curline;
        !           117:                        char2 = 0;
        !           118:                } else {
        !           119:                        line2 = next_line(curline, num);
        !           120:                        if ((LineDist(curline, line2) < num) || (line2 == curline))
        !           121:                                char2 = length(line2);
        !           122:                        else
        !           123:                                char2 = 0;
        !           124:                }
        !           125:        } else if (blnkp(&linebuf[curchar])) {
        !           126:                line2 = next_line(curline, 1);
        !           127:                if (line2 == curline)
        !           128:                        char2 = length(curline);
        !           129:                else
        !           130:                        char2 = 0;
        !           131:        } else {
        !           132:                line2 = curline;
        !           133:                char2 = length(curline);
        !           134:        }
        !           135:        reg_kill(line2, char2, 0);
        !           136: }
        !           137: 
        !           138: /* kill to beginning of sentence */
        !           139: 
        !           140: void
        !           141: KillBos()
        !           142: {
        !           143:        negate_arg_value();
        !           144:        KillEos();
        !           145: }
        !           146: 
        !           147: /* Kill to end of sentence */
        !           148: 
        !           149: void
        !           150: KillEos()
        !           151: {
        !           152:        Line    *line1;
        !           153:        int     char1;
        !           154: 
        !           155:        line1 = curline;
        !           156:        char1 = curchar;
        !           157:        Eos();
        !           158:        reg_kill(line1, char1, 1);
        !           159: }
        !           160: 
        !           161: void
        !           162: KillExpr()
        !           163: {
        !           164:        Line    *line1;
        !           165:        int     char1;
        !           166: 
        !           167:        line1 = curline;
        !           168:        char1 = curchar;
        !           169:        FSexpr();
        !           170:        reg_kill(line1, char1, 1);
        !           171: }
        !           172: 
        !           173: void
        !           174: Yank()
        !           175: {
        !           176:        Line    *line,
        !           177:                *lp;
        !           178:        Bufpos  *dot;
        !           179: 
        !           180:        if (killbuf[killptr] == 0)
        !           181:                complain("[Nothing to yank!]");
        !           182:        lsave();
        !           183:        this_cmd = YANKCMD;
        !           184:        line = killbuf[killptr];
        !           185:        lp = lastline(line);
        !           186:        dot = DoYank(line, 0, lp, length(lp), curline, curchar, curbuf);
        !           187:        set_mark();
        !           188:        SetDot(dot);
        !           189: }
        !           190: 
        !           191: void
        !           192: WtModBuf()
        !           193: {
        !           194:        if (!ModBufs(NO))
        !           195:                message("[No buffers need saving]");
        !           196:        else
        !           197:                put_bufs(is_an_arg());
        !           198: }
        !           199: 
        !           200: void
        !           201: put_bufs(askp)
        !           202: int    askp;
        !           203: {
        !           204:        register Buffer *oldb = curbuf,
        !           205:                        *b;
        !           206: 
        !           207:        for (b = world; b != 0; b = b->b_next) {
        !           208:                if (!IsModified(b) || b->b_type != B_FILE)
        !           209:                        continue;
        !           210:                SetBuf(b);      /* Make this current Buffer */
        !           211:                if (curbuf->b_fname == 0) {
        !           212:                        char    *newname;
        !           213: 
        !           214:                        newname = ask(NullStr, "Buffer \"%s\" needs a file name; type Return to skip: ", b->b_name);
        !           215:                        if (*newname == 0)
        !           216:                                continue;
        !           217:                        setfname(b, newname);
        !           218:                }
        !           219:                if (askp && (yes_or_no_p("Write %s? ", curbuf->b_fname) == NO))
        !           220:                        continue;
        !           221:                filemunge(curbuf->b_fname);
        !           222: #if !(defined(MSDOS) || defined(MAC))
        !           223:                chk_mtime(curbuf, curbuf->b_fname, "save");
        !           224: #endif
        !           225:                file_write(curbuf->b_fname, 0);
        !           226:        }
        !           227:        SetBuf(oldb);
        !           228: }
        !           229: 
        !           230: void
        !           231: ToIndent()
        !           232: {
        !           233:        Bol();
        !           234:        skip_wht_space();
        !           235: }
        !           236: 
        !           237: void
        !           238: skip_wht_space()
        !           239: {
        !           240:        register char   *cp,
        !           241:                        c;
        !           242: 
        !           243:        for (cp = linebuf + curchar; (c = *cp)!='\0'; cp++)
        !           244:                if (c != ' ' && c != '\t')
        !           245:                        break;
        !           246:        curchar = cp - linebuf;
        !           247: }
        !           248: 
        !           249: /* GoLine -- go to a line, usually wired to goto-line, ESC g or ESC G.
        !           250:    If no argument is specified it asks for a line number. */
        !           251: void
        !           252: GoLine()
        !           253: {
        !           254:        Line    *newline;
        !           255: 
        !           256:        if (!is_an_arg())
        !           257:                set_arg_value(ask_int("Line: ",10));
        !           258:        newline = next_line(curbuf->b_first, arg_value() - 1);
        !           259:        PushPntp(newline);
        !           260:        SetLine(newline);
        !           261: }
        !           262: 
        !           263: void
        !           264: NotModified()
        !           265: {
        !           266:        unmodify();
        !           267: }
        !           268: 
        !           269: void
        !           270: SetLMargin()
        !           271: {
        !           272:        int     lmarg = calc_pos(linebuf, curchar);
        !           273: 
        !           274:        if (lmarg >= RMargin)
        !           275:                complain("[Left margin must be left of right margin]");
        !           276:        LMargin = lmarg;
        !           277: }
        !           278: 
        !           279: void
        !           280: SetRMargin()
        !           281: {
        !           282:        int     rmarg = calc_pos(linebuf, curchar);
        !           283: 
        !           284:        if (rmarg <= LMargin)
        !           285:                complain("[Right margin must be right of left margin]");
        !           286:        RMargin = rmarg;
        !           287: }
        !           288: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.