|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted provided
6: * that: (1) source distributions retain this entire copyright notice and
7: * comment, and (2) distributions including binaries display the following
8: * acknowledgement: ``This product includes software developed by the
9: * University of California, Berkeley and its contributors'' in the
10: * documentation or other materials provided with the distribution and in
11: * all advertising materials mentioning features or use of this software.
12: * Neither the name of the University nor the names of its contributors may
13: * be used to endorse or promote products derived from this software without
14: * specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
16: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
17: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: */
19:
20: #ifndef lint
21: static char sccsid[] = "@(#)schedule.c 5.4 (Berkeley) 6/1/90";
22: #endif /* not lint */
23:
24: # include "trek.h"
25:
26: /*
27: ** SCHEDULE AN EVENT
28: **
29: ** An event of type 'type' is scheduled for time NOW + 'offset'
30: ** into the first available slot. 'x', 'y', and 'z' are
31: ** considered the attributes for this event.
32: **
33: ** The address of the slot is returned.
34: */
35:
36: struct event *schedule(type, offset, x, y, z)
37: int type;
38: double offset;
39: char x, y;
40: char z;
41: {
42: register struct event *e;
43: register int i;
44: double date;
45:
46: date = Now.date + offset;
47: for (i = 0; i < MAXEVENTS; i++)
48: {
49: e = &Event[i];
50: if (e->evcode)
51: continue;
52: /* got a slot */
53: # ifdef xTRACE
54: if (Trace)
55: printf("schedule: type %d @ %.2f slot %d parm %d %d %d\n",
56: type, date, i, x, y, z);
57: # endif
58: e->evcode = type;
59: e->date = date;
60: e->x = x;
61: e->y = y;
62: e->systemname = z;
63: Now.eventptr[type] = e;
64: return (e);
65: }
66: syserr("Cannot schedule event %d parm %d %d %d", type, x, y, z);
67: }
68:
69:
70: /*
71: ** RESCHEDULE AN EVENT
72: **
73: ** The event pointed to by 'e' is rescheduled to the current
74: ** time plus 'offset'.
75: */
76:
77: reschedule(e1, offset)
78: struct event *e1;
79: double offset;
80: {
81: double date;
82: register struct event *e;
83:
84: e = e1;
85:
86: date = Now.date + offset;
87: e->date = date;
88: # ifdef xTRACE
89: if (Trace)
90: printf("reschedule: type %d parm %d %d %d @ %.2f\n",
91: e->evcode, e->x, e->y, e->systemname, date);
92: # endif
93: return;
94: }
95:
96:
97: /*
98: ** UNSCHEDULE AN EVENT
99: **
100: ** The event at slot 'e' is deleted.
101: */
102:
103: unschedule(e1)
104: struct event *e1;
105: {
106: register struct event *e;
107:
108: e = e1;
109:
110: # ifdef xTRACE
111: if (Trace)
112: printf("unschedule: type %d @ %.2f parm %d %d %d\n",
113: e->evcode, e->date, e->x, e->y, e->systemname);
114: # endif
115: Now.eventptr[e->evcode & E_EVENT] = 0;
116: e->date = 1e50;
117: e->evcode = 0;
118: return;
119: }
120:
121:
122: /*
123: ** Abreviated schedule routine
124: **
125: ** Parameters are the event index and a factor for the time
126: ** figure.
127: */
128:
129: struct event *xsched(ev1, factor, x, y, z)
130: int ev1;
131: int factor;
132: int x, y, z;
133: {
134: register int ev;
135:
136: ev = ev1;
137: return (schedule(ev, -Param.eventdly[ev] * Param.time * log(franf()) / factor, x, y, z));
138: }
139:
140:
141: /*
142: ** Simplified reschedule routine
143: **
144: ** Parameters are the event index, the initial date, and the
145: ** division factor. Look at the code to see what really happens.
146: */
147:
148: xresched(e1, ev1, factor)
149: struct event *e1;
150: int ev1;
151: int factor;
152: {
153: register int ev;
154: register struct event *e;
155:
156: ev = ev1;
157: e = e1;
158: reschedule(e, -Param.eventdly[ev] * Param.time * log(franf()) / factor);
159: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.