Annotation of 43BSD/contrib/icon/lib/keywd.c, revision 1.1

1.1     ! root        1: #include "../h/rt.h"
        !             2: #include "../h/keyword.h"
        !             3: #ifdef SYSTIME
        !             4: #include <sys/time.h>
        !             5: #else SYSTIME
        !             6: #include <time.h>
        !             7: #endif SYSTIME
        !             8: #include <sys/types.h>
        !             9: #include <sys/times.h>
        !            10: 
        !            11: static char *day[] = {
        !            12:    "Sunday", "Monday", "Tuesday", "Wednesday",
        !            13:    "Thursday", "Friday", "Saturday"
        !            14:    };
        !            15: 
        !            16: static char *month[] = {
        !            17:    "January", "February", "March", "April", "May", "June",
        !            18:    "July", "August", "September", "October", "November", "December"
        !            19:    };
        !            20: 
        !            21: /*
        !            22:  * keywd - process keyword.
        !            23:  */
        !            24: 
        !            25: keywd(nargs, arg1)
        !            26: int nargs;
        !            27: struct descrip arg1;
        !            28:    {
        !            29:    register int hour, i;
        !            30:    register char *merid;
        !            31:    char sbuf[MAXSTRING];
        !            32:    struct tm *tbuf, *localtime();
        !            33:    struct tms tp;
        !            34:    long time(), clock, runtim;
        !            35:    char *alcstr();
        !            36: 
        !            37:    SetBound;
        !            38: 
        !            39:    /*
        !            40:     * This is just plug and chug code.  For whatever keyword is desired,
        !            41:     *  the appropriate value is dug out of the system and made into
        !            42:     *  a suitable Icon value.
        !            43:     *
        !            44:     * A few special cases are worth noting:
        !            45:     *  &fail - calls fail();
        !            46:     *  &pos, &random, &trace - trapped variables are made for possible
        !            47:     *   subsequent assignments.
        !            48:     */
        !            49:    switch (INTVAL(arg1)) {
        !            50:       case K_ASCII:
        !            51:          arg1.type = D_CSET;
        !            52:          BLKLOC(arg1) = (union block *) &k_ascii;
        !            53:          break;
        !            54:       case K_CLOCK:
        !            55:          sneed(8);
        !            56:          time(&clock);
        !            57:          tbuf = localtime(&clock);
        !            58:          sprintf(sbuf,"%02d:%02d:%02d",tbuf->tm_hour,tbuf->tm_min,tbuf->tm_sec);
        !            59:          STRLEN(arg1) = 8;
        !            60:          STRLOC(arg1) = alcstr(sbuf,8);
        !            61:          break;
        !            62:       case K_CSET:
        !            63:          arg1.type = D_CSET;
        !            64:          BLKLOC(arg1) = (union block *) &k_cset;
        !            65:          break;
        !            66:       case K_DATE:
        !            67:          sneed(10);
        !            68:          time(&clock);
        !            69:          tbuf = localtime(&clock);
        !            70:          sprintf(sbuf, "%04d/%02d/%02d",
        !            71:                       (tbuf->tm_year)+1900,tbuf->tm_mon+1,tbuf->tm_mday);
        !            72:          STRLEN(arg1) = 10;
        !            73:          STRLOC(arg1) = alcstr(sbuf,10);
        !            74:          break;
        !            75:       case K_DATELINE:
        !            76:          time(&clock);
        !            77:          tbuf = localtime(&clock);
        !            78:          if ((hour = tbuf->tm_hour) >= 12) {
        !            79:             merid = "pm";
        !            80:             if (hour > 12)
        !            81:                hour -= 12;
        !            82:             }
        !            83:          else {
        !            84:             merid = "am";
        !            85:             if (hour < 1)
        !            86:                hour += 12;
        !            87:             }
        !            88:          sprintf(sbuf, "%s, %s %d, %d  %d:%02d %s",
        !            89:                  day[tbuf->tm_wday], month[tbuf->tm_mon], tbuf->tm_mday,
        !            90:                  1900 + tbuf->tm_year, hour, tbuf->tm_min, merid);
        !            91:          sneed(i = strlen(sbuf));
        !            92:          STRLEN(arg1) = i;
        !            93:          STRLOC(arg1) = alcstr(sbuf, i);
        !            94:          break;
        !            95:       case K_ERROUT:
        !            96:          arg1.type = D_FILE;
        !            97:          BLKLOC(arg1) = (union block *) &k_errout;
        !            98:          break;
        !            99:       case K_FAIL:
        !           100:          fail();
        !           101:          break;
        !           102:       case K_HOST:
        !           103:          iconhost(sbuf);
        !           104:          sneed(i = strlen(sbuf));
        !           105:          STRLEN(arg1) = i;
        !           106:          STRLOC(arg1) = alcstr(sbuf, i);
        !           107:          break;
        !           108:       case K_INPUT:
        !           109:          arg1.type = D_FILE;
        !           110:          BLKLOC(arg1) = (union block *) &k_input;
        !           111:          break;
        !           112:       case K_LCASE:
        !           113:          arg1.type = D_CSET;
        !           114:          BLKLOC(arg1) = (union block *) &k_lcase;
        !           115:          break;
        !           116:       case K_LEVEL:
        !           117:          arg1.type = D_INTEGER;
        !           118:          INTVAL(arg1) = k_level;
        !           119:          break;
        !           120:       case K_MAIN:
        !           121:          arg1 = k_main;
        !           122:          break;
        !           123:       case K_NULL:
        !           124:          arg1 = nulldesc;
        !           125:          break;
        !           126:       case K_OUTPUT:
        !           127:          arg1.type = D_FILE;
        !           128:          BLKLOC(arg1) = (union block *) &k_output;
        !           129:          break;
        !           130:       case K_POS:
        !           131:          arg1.type = D_TVPOS;
        !           132:          INTVAL(arg1) = k_pos;
        !           133:          break;
        !           134:       case K_RANDOM:
        !           135:          arg1.type = D_TVRAND;
        !           136:          BLKLOC(arg1) = (union block *) &k_random;
        !           137:          break;
        !           138:       case K_SOURCE:
        !           139:          arg1 = BLKLOC(current)->estack.activator;
        !           140:          break;
        !           141:       case K_SUBJECT:
        !           142:          arg1.type = D_VAR;
        !           143:          BLKLOC(arg1) = (union block *) &k_subject;
        !           144:          break;
        !           145:       case K_TIME:
        !           146:          times(&tp);
        !           147:          runtim =
        !           148:            1000 * ((tp.tms_utime - starttime) / (double)HZ);
        !           149:          mkint(runtim, &arg1);
        !           150:          break;
        !           151:       case K_TRACE:
        !           152:          arg1.type = D_TVTRACE;
        !           153:          INTVAL(arg1) = k_trace;
        !           154:          break;
        !           155:       case K_UCASE:
        !           156:          arg1.type = D_CSET;
        !           157:          BLKLOC(arg1) = (union block *) &k_ucase;
        !           158:          break;
        !           159:       case K_VERSION:
        !           160:          sneed(i = strlen(VERSION));
        !           161:          STRLEN(arg1) = i;
        !           162:          STRLOC(arg1) = VERSION;
        !           163:          break;
        !           164:       case K_OPTIONS:
        !           165:          sneed(i = strlen(OPTIONS));
        !           166:          STRLEN(arg1) = i;
        !           167:          STRLOC(arg1) = OPTIONS;
        !           168:          break;
        !           169:       default:
        !           170:          syserr("keyword: unknown keyword type.");
        !           171:       }
        !           172:    ClearBound;
        !           173:    }

unix.superglobalmegacorp.com

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