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