|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: */ ! 6: ! 7: #ifndef lint ! 8: static char sccsid[] = "@(#)schedule.c 5.1 (Berkeley) 5/30/85"; ! 9: #endif not lint ! 10: ! 11: # include "trek.h" ! 12: ! 13: /* ! 14: ** SCHEDULE AN EVENT ! 15: ** ! 16: ** An event of type 'type' is scheduled for time NOW + 'offset' ! 17: ** into the first available slot. 'x', 'y', and 'z' are ! 18: ** considered the attributes for this event. ! 19: ** ! 20: ** The address of the slot is returned. ! 21: */ ! 22: ! 23: struct event *schedule(type, offset, x, y, z) ! 24: int type; ! 25: double offset; ! 26: char x, y; ! 27: char z; ! 28: { ! 29: register struct event *e; ! 30: register int i; ! 31: double date; ! 32: ! 33: date = Now.date + offset; ! 34: for (i = 0; i < MAXEVENTS; i++) ! 35: { ! 36: e = &Event[i]; ! 37: if (e->evcode) ! 38: continue; ! 39: /* got a slot */ ! 40: # ifdef xTRACE ! 41: if (Trace) ! 42: printf("schedule: type %d @ %.2f slot %d parm %d %d %d\n", ! 43: type, date, i, x, y, z); ! 44: # endif ! 45: e->evcode = type; ! 46: e->date = date; ! 47: e->x = x; ! 48: e->y = y; ! 49: e->systemname = z; ! 50: Now.eventptr[type] = e; ! 51: return (e); ! 52: } ! 53: syserr("Cannot schedule event %d parm %d %d %d", type, x, y, z); ! 54: } ! 55: ! 56: ! 57: /* ! 58: ** RESCHEDULE AN EVENT ! 59: ** ! 60: ** The event pointed to by 'e' is rescheduled to the current ! 61: ** time plus 'offset'. ! 62: */ ! 63: ! 64: reschedule(e1, offset) ! 65: struct event *e1; ! 66: double offset; ! 67: { ! 68: double date; ! 69: register struct event *e; ! 70: ! 71: e = e1; ! 72: ! 73: date = Now.date + offset; ! 74: e->date = date; ! 75: # ifdef xTRACE ! 76: if (Trace) ! 77: printf("reschedule: type %d parm %d %d %d @ %.2f\n", ! 78: e->evcode, e->x, e->y, e->systemname, date); ! 79: # endif ! 80: return; ! 81: } ! 82: ! 83: ! 84: /* ! 85: ** UNSCHEDULE AN EVENT ! 86: ** ! 87: ** The event at slot 'e' is deleted. ! 88: */ ! 89: ! 90: unschedule(e1) ! 91: struct event *e1; ! 92: { ! 93: register struct event *e; ! 94: ! 95: e = e1; ! 96: ! 97: # ifdef xTRACE ! 98: if (Trace) ! 99: printf("unschedule: type %d @ %.2f parm %d %d %d\n", ! 100: e->evcode, e->date, e->x, e->y, e->systemname); ! 101: # endif ! 102: Now.eventptr[e->evcode & E_EVENT] = 0; ! 103: e->date = 1e50; ! 104: e->evcode = 0; ! 105: return; ! 106: } ! 107: ! 108: ! 109: /* ! 110: ** Abreviated schedule routine ! 111: ** ! 112: ** Parameters are the event index and a factor for the time ! 113: ** figure. ! 114: */ ! 115: ! 116: struct event *xsched(ev1, factor, x, y, z) ! 117: int ev1; ! 118: int factor; ! 119: int x, y, z; ! 120: { ! 121: register int ev; ! 122: ! 123: ev = ev1; ! 124: return (schedule(ev, -Param.eventdly[ev] * Param.time * log(franf()) / factor, x, y, z)); ! 125: } ! 126: ! 127: ! 128: /* ! 129: ** Simplified reschedule routine ! 130: ** ! 131: ** Parameters are the event index, the initial date, and the ! 132: ** division factor. Look at the code to see what really happens. ! 133: */ ! 134: ! 135: xresched(e1, ev1, factor) ! 136: struct event *e1; ! 137: int ev1; ! 138: int factor; ! 139: { ! 140: register int ev; ! 141: register struct event *e; ! 142: ! 143: ev = ev1; ! 144: e = e1; ! 145: reschedule(e, -Param.eventdly[ev] * Param.time * log(franf()) / factor); ! 146: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.