|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.