-
Notifications
You must be signed in to change notification settings - Fork 1
/
ChangeLog
2217 lines (2174 loc) · 103 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
This file is the *brief* version of what has been changed; see
ChangeLog.alpha, ChangeLog.beta, and ChangeLog.old/ for all the gory
details.
(pre-v22.2 changes)
* new options:
. GET_CHAR_IS_BUFFERED
. USE_32BIT_ADDRESSING
. NUM_EXTERNAL_CMDS
* features:
. new efun: socket_status()
. classes can be inherited multiple times so long as the definitions
are consistent
. implemented MUD mode external ports
. improved warnings for code with no side effects
. resolve() can now take a function pointer as the second arg
. filter() can now iterate over each character of a string
. LPC programs can now exceed 64k in size with USE_32BIT_ADDRESSING
. deep_inventory() and living() now default to this_object()
. cp() now errors like mv() when source and dest are the same
. -> syntax now uses call_other() simul_efun if one exists
. function tables are now always compressed
. '&' is now a synonym for 'ref' when COMPAT_32 is defined
. added #warn and #error preprocess directives
. when no address server connection exists, an attempt will be made
once every fifteen minutes to establish one.
. (s)printf() is now re-entrant, so it can be used from the
object_name() master apply.
. on most platforms, localtime() efun adds a new element to the array
it returns indicating daylight savings time
. the 3rd argument to tell_room() can now be an object
. when COMPAT_32 is defined, closeurep becomes an alias for functionp
. added extensive socket statistics and network_stats() as a new
contrib efun to retrieve these stats.
. socket_bind() now takes an optional 3rd argument that is the address
to bind to rather than INADDR_ANY or the 'mud ip' config address.
. socket_address() now takes an optional 2nd argument to get the local
address for a socket
. all objects now 'inherit' the class definitions from the simul_efun
object if there are any.
. restructured PACKAGE_DB to make it easier to add more database
support
. added support for MySQL in addition to MSQL to PACKAGE_DB
. compile_object() master apply now gets a second argument indicating
whether or not a clone is being done
. compile_object() master apply now gets arguments passed to new()
when cloning a virtual object as they'd be passed to create() in a
real object.
. implemented rfc 1184 (telnet linemode option) to be support running
on port 23.
* parser enhancements:
. new error ERR_MANY_PATHS
. new modifier ':c' that means just choose the first one found
. two object rules are examined more thoroughly. This changes the
semantics for direct_ and indirect_ applies. They can now be called
with 0s as the object-type arguments, but it is now guaranteed that
they will be called with filled object arguments at least once
during the processing of a rule.
. added optional 3rd and 4th arguments to parse_sentence(). The 3rd
is an array of objects to use in the parse instead of the inventory
of the user's environment. Nested arrays indicate containment. The
4th is mapping of string -> object which can be used to supply
nicknames and similar things.
* COMPAT BUSTERs:
. dump_socket_status() efun is gone, see socket_status()
. SERVER_IP is no longer a compile-time option. it is now a runtime
configuration option called "mud ip"
. when COMPAT_32 is defined with PACKAGE_UIDS, the uid assigned to a
new object is the euid of the current object rather than the uid of
the current object.
. when loading/cloning a virtual object, mudlib stats, uid/euid and
privs are now properly reset with the newly assigned object name.
(pre-v22.1 changes)
* new options:
. NO_SNOOP
* features:
. support for token quoting in the preprocessor (#x)
. 'array' is used in error messages with ARRAY_RESERVED_WORD is on
. added array |
Works analogously to &:
({ 1, 2, 3 }) & ({ 2, 4 }) = ({ 2 })
({ 1, 2, 3 }) | ({ 2, 4 }) = ({ 1, 2, 3, 4 })
. both &= and |= now work with arrays
. The requirement that a snooper must be interactive has been lifted
(though this isn't particularly useful unless RECIEVE_SNOOP)
objects may now snoop other users (logging output to logs,
output redirection, etc)
. #'foo is now the same as (: foo :) when COMPAT_32 is defined
. added a 'portbind' program; see v22.1a7 for details
. MudOS now checks if file descriptor #6 is a valid socket when
it starts up; if it is, it is used as a login port.
. support for binding a specific IP number for machines with more
than one
. It is now legal to use a class member of something of type mixed,
as long as it is unambigous (e.g. foo->x is ok as long as only
one class in scope has a member named 'x', or if 'x' is in the
same position in all classes in scope)
. Unused local variables now generate warnings
. function arguments no longer need to have names (and not naming
them inhibits 'unused' warnings)
. more than one access specifier (e.g. 'public private protected')
generates a warning
. If SENSIBLE_MODIFIERS is defined, then:
(1) 'static' no longer exists, and is replaced by 'nosave' and
'protected'
(2) 'public' no longer means what it used to; it now means the
default visibility
. if REF_RESERVED_WORD is defined, the 'ref' can be used to declare
arguments to functions to be by reference instead of by value.
example:
int foo(int ref i) {
i++;
}
void create() {
int y = 1; foo(ref y); write(y);
}
prints '2'. Note that ref is required both in the declaration
and the call.
. added an 'efun_defined' pseudo function to the preprocessor. It
works just like 'defined', except that it looks up efuns. Example:
#if !efun_defined(snoop)
write("snoop efun not available.\n");
#endif
* bug fixes:
. hidden object fixes for present() and environment()
. token pasting and preprocessor macro expansion
* COMPAT_BUSTERs:
. log_error() filenames have a leading /
. tail() efun was removed; compat simul in compat/simuls
. #include <...> now no longer searches based on
relative paths; #include "..." still does.
. ORIGIN_CALL_OUT is now ORIGIN_INTERNAL; in addition
most driver callbacks which do not use hard coded function names
also use ORIGIN_INTERNAL (add_action, socket callbacks, etc).
The practical fallout of this is that such routines may be static,
but *not* private.
. COMPAT_BUSTER: modifiers from a '<modifier>:' declaration only
affect declarations which have no modifiers of their own. I.e.
'private: nomask x;' no longer declares x to be private
(pre-v22 changes)
* new options:
. NO_RESETS
. added a COMPAT_32 option, which tweaks a few things to allow
some 3.2/3.2.1 code to be ported easier
. added REVERSIBLE_EXPLODE_STRING
. added CALLOUT_HANDLES; see v22a28 for details. Allows a specific
call_out to be tracked and removed instead of having to specify
the function name.
. Added a FLUSH_OUTPUT_IMMEDIATELY option, which disables buffering
of output. Useful for debugging.
* features:
. It is legal to define variables in foreach() statements, e.g.:
foreach (string x, object y in z)
. various indexing error messages are now more information
. many changes/improvements to the parsing package
. added a package for running/communicating with external commands
(tar, gzip, etc) See the v22a15 entry for details.
. carriage returns are now considered white space by the parser,
so DOS style files don't cause errors
. new(class X) can now specify values for the members. Examples:
class foo { int x; string y; }
class foo f1 = new(class foo, x : 5);
class foo f2 = new(class foo, y : "foo", x : 1);
. added named_livings() contrib efun, which is faster than livings(),
but only finds livings which have called set_living_name().
. bind(f, ob) now always succeeds if f is already bound to ob
. function(...) { ... } is now rebindable if it does not reference
local functions or global variables
. the message of message() may be of any type
. replaceable now can be optionally passed a second array argument
which is a list of function names to ignore; if the second arg
is left out, ({ "create" }) is assumed, which gives the old
behavior.
. made the message queue flushing a bit lazier which should result
in smoother output and larger packet sizes
. added a flush_messages(void | object) efun for manually flushing
message queues (during a long thread of execution, for example)
. \012 octal codes and \x1e hex codes are now allowed in string
and character constants
. added a classp() efun
. fixed sort_array() to work correctly when called from inside
itself
. added repeat_string() contrib efun. Example:
repeat_string("-=", 10) == "-=-=-=-=-=-=-=-"
. added a memory_summary() contrib efun, which returns a mapping
of with entries: map["program name"]["variable name"]
Each entry contains the number of bytes used by that variable in
all active instances of that program. The size of shared structures
is divided up evenly between all values that reference it.
. terminal_colour() now has two more optional args; the 3rd is the
width to wrap at, and the 4th is the indent for lines after the
first
. characters in user input with the 8th bit set are no longer ignored
. function_exists(string, object, flag); if flag is nonzero, private
and static functions are checked too.
. SIGUSR2 will now cause the driver to eval out immediately
* optimizations:
. sprintf() is about 3 times faster than it used to be
. optimized present(), terminal_colour()
. call_out() is now O(1), not O(n)
. function tables are sorted, so they can be searched in O(log n)
time instead of O(n). Speeds up call_other(), function_exists(),
etc.
* memory usage:
. fixed leaks in call_out(), illegal arguments to call_stack(),
errors in id()
. function overhead is now 15 bytes per function defined and 5 bytes
per function inherited, not 14 bytes for both. Typically cuts
function memory usage in half or more, also:
. if COMPRESS_FUNCTION_TABLES is defined, the function tables are
compressed even further (estimated compression: 2-3x) at the cost
of slowing down function calls slightly (seems to be <10%)
. variable information is now stored only in the program in which
the variable is defined; estimated compression ratio is about
10:1 on typical libs
* bug fixes:
. testsuite now compiles with almost any option settings
. sprintf()'s %O handles recursive structures gracefully
. many fixes to center/left justification in sprintf
. function arguments and variables no longer may be of type 'void'
. leading and trailing whitespace in the config file is now ignored
. switch (...) { case 0: function() { break; }; },
while (...) { function() { continue; }; },
while (...) { e = catch { break; } }
and similar pathological code is no longer allowed.
. message() now behaves correctly when called from inside
recieve_message() [i.e. recursively]
. a number of changes to $() notation. See v22a38.
. several fixes to sscanf(): format strings ending in %, %% as
the last pattern
. fixed socket_close() to not close sockets immediately when data
is buffered internally; this adds a new socket state 'CLOSING'
which will transparently change to 'CLOSED' when the data has
been written.
. cleaned up the disk full logic a bit; also added error checking
on the fclose(), which apparently the call that usually errors.
should prevent .o files from getting lost when the disk is full
. fixed read_file() to return "" and not 0 for zero-length files
. sending a SIGUSR2 to the mud will now cause it to eval out; temporary
fix until eval_cost gets rewritten.
. sscanf() no longer errors on some legal uses of %%
* crasher fixes:
. removing heart_beats during a heart_beat()
. lots in the parsing package
. extremely long tables in sprintf(), negative field widths, etc,
etc, etc
. recursive structures in error traces
. function_owner()
. unterminated @ and @@ blocks
. some too deep recursion errors
. mapping composition
. quite a number of other rare ones
* COMPAT_BUSTERS:
. previous_object() is now 0 in heart_beat()
. the scope of variables defined in for() and foreach() is inside
the loop ONLY; it used to extend to the end of the function
. "%^" is no longer considered "special" by sprintf(); see
terminal_colour() if you want to wrap strings containing it.
. removed break_string(), process_string(), process_value().
See compat/simuls/ for replacements
. call_stack(3) now uses strings, like origin()
. call_out_info() elements now have only 3 elements,
not 4; this is due to argument handling restructuring, as well
as mild security concerns for reference types. Maybe an option
will be added to get the arguments at a latter date if it is
desired.
. all inherits must now precede all global variable definitions
. Added slashes to the front of many object/program names. The most
noteworthy are: deep_inherit_list(), inherit_list(), call_stack(),
names passed to author_file(), domain_file(), privs_file(),
creator_file(), a few error messages and tons of debug messages
. The third argument passed to valid_override() now has a leading
slash
. The filename passed to compile_object() has a leading slash
Thu May 30 14:35:06 EDT 1996 (tim@wfn-shop.princeton.edu (Beek))
* bumped version number to v21.7
* new options:
. NO_ENVIRONMENT
* features:
. destruct()'ing the master or simul_efun object now fails if a
new copy can't be loaded, leaving the old copy loaded
. copy() supports classes
. the simul_efun object is optional; simply don't specify one in
the runtime config file if you don't want one
. outside functions, "modifier:" can be used to make all
functions, variables, and inherits automatically include
"modifier" until the next such definition. For example,
"private static:" makes all definitions that follow it both
private and static
. ed ranges can now extend past the end of the file; any line #
larger than the last one refers to the last line
. foreach (int in string)
. preliminary Windows 95 support, though I'd recommend using
a v22 beta instead
* new warnings:
. return type doesn't match prototype
* contrib efuns:
. query_ip_port(), for figuring out which of the external ports
an interactive object connected to (the port number is also
passed to connect; this causes it to be stored internally)
* optimizations:
. better code generation for some loops, empty blocks in if
statements, x[y..<1], elimination of expressions with no
side effects
. sprintf() is significantly faster
. most mapping operations are significantly faster
* memory usage:
. mapping memory is down about 20%
* bug fixes:
. A number of bugs which allowed private functions to be called
were removed
. problems with comments in long #define's
. various problems with the 'array' keyword
. testsuite works again
. literally hundreds of fixes to the parsing package, though
if you use it I'd suggest using a v22 beta instead.
. ranlib is run on subdirectory archives, for systems that need it
. using the values of (void) efuns in some cases
. ... syntax varargs expansion in some cases
. several bug fixes in macro expansion
. @@ blocks work again
. a few crasher and leak fixes in parse_command()
. query_verb() returns the entire verb even when only part of it
was matched again
. SIGFPE and SIGPIPE no longer take down the driver on some
systems
. case 0 now works in string switches again
. (int constant)/(real constant) is a real, not an int
. the telnet option code is more robust to protect against buggy
telnet clients
. a number of other fixes for rare crashers
* COMPAT_BUSTERS:
. the each() efun is gone. Use foreach().
* minor changes:
. objects with environments may be cloned
* LPC->C:
. valid_compile_to_c() in the master object now controls the use
of generate_source()
. RUNTIME_LOADING works if your system supports dlopen()/dlsym();
see ChangeLog.alpha:v21.7a1 for details
Fri Oct 6 18:58:01 EDT 1995 (tim@handel.princeton.edu (Beek))
* bumped version number to v21.6
* LPC->C support:
. annonymous functions, function pointers, and foreach now work
. classes now work
. faster string constants
. a number of small fixes to code generation
* compiler changes:
. warning for negative constants not meaning indexing from end
. internal representation was changed to support better
optimization
. warning for (: string constant :)
* optimizations:
. calling of efuns is significantly faster
. faster calling of efun function pointers
. last use of local variables when #pragma optimize is on
* removed support for:
. #pragma efun
. contrib/compat.c
* features:
. variables() has an optional flag like functions()
. new contrib parsing package added
. implode(array, function) now takes a third arg (the value to
start with)
. more extensive configure checks
. 'array' is now a legal type, meaning 'mixed *'. See the
v21.6a8 ChangeLog for more info
. catch { ... } and time_expression { ... } are now legal
. if a function is defined as: void foo(int x, array args...)
then all the additional arguments after x are put in args
. regexp(string, string) now exists, returns 1/0
. remove_call_out() [no args] now removes ALL of this_object()'s
call_outs
* crasher fixes:
. remove_interactive()
. illegal indexes to array constants, e.g ({ 1, 2 })[5]
. regexp() with 8 bit chars when host char is signed
. two in parse_command()
. don't go down on floating point exceptions on systems which
crash when a SIGFPE is raised
* bug fixes:
. replace_string() behavior in some cases
. compilation fixes for DEC alpha
. ranlib is run on the archives for systems that need it.
* COMPAT BUSTERs:
. origin() and typeof() now return strings. If you used the
defines in the driver includes, that should be fine
. filter_mapping() now passes the value as the second element,
just like map_mapping()
Sun Jul 30 10:14:15 EDT 1995 (tim@handel.princeton.edu (Beek))
* bumped version number to v21.5
* features:
. a ... operator which expands an array into a list of arguments
. %(regexp) format for sscanf()
. added implode(array, function)
. added foreach()
. added \a and \e for bell and escape
. a 'local_options' file can be used to override options.h
* fixed crashers in:
. empty sefun objects
. non-existent socket callbacks
* bugfixes in:
. type errors including classes
. consecutive tokens in sscanf() like %s%%
. calling set_heart_beat() from from a heart_beat
. LPC->C switch statements
. MUD mode sockets
. unterminated @ and @@ blocks
. load_object()
. better configure checks
. pluralize()
* optimizations:
. array call_other()
. replace_string()
. calling function pointers
. replace_program()
. heart_beats
. member_array(), string compares, string hashing
. more efficient handling of errors
* contrib efuns:
. remove_interactive(), variables(), heart_beats()
* COMPAT_BUSTERS:
. the apply() efun is gone. There is a simul for it in compat/simuls
. Now, if process_input() returns a non-zero number, no further
processing takes place. Also, returning zero does not disable
the function
. this_player() is now zero in get_save_file_name(); a new 2nd
argument is the player
. 'foreach' and 'in' are now reserved words
. map_mapping now passes the key and the value
. It is now illegal to any of the following from a
verb action which return zero:
call remove_action()
destruct an object which defines commands
move an object which defines commands
move a living object
. the following efuns now return strings and print nothing to
this_player():
malloc_status(), cache_stats(), lpc_info(), mud_status(),
dump_file_descriptors(), program_info(),
debug_info(), dump_socket_status()
Sun Jun 11 03:33:40 EDT 1995 (tim@handel.princeton.edu (Beek))
* bumped version number to v21.4
* features:
. a file named 'local_options' with the defines from options.h in
it will override options.h. You will be warned if new options
that don't exist in your local_options file have been added.
. cleaned up the data written to stdout/debug.log. The same
info now goes to both.
. the logon() function is no longer required.
. sizeof(class) now returns the number of members
. '\a' is now bell, '\e' is the escape char
. foreach (<var> [, <var>] in <expr) <statement or block>
for looping over arrays/mappings
. memmove() checks done by edit_source -configure
. implode(mixed *, function). See the v21.4a6 changelog for
some uses/examples
. '%x' can be used for hexidecimal in sscanf()
. w->x[y] = z, w->x[y]++ and w->x[y]-- are legal now
* fixed crashers in:
. people going linkdead in ed
. add_action parsing when objects move/get destructed
. calling non-existent socket callbacks
. simul efuns objects with no simuls
. socket_address()
. calling function pointers in swapped objects
. x->foo compilation errors when x was not a class
* new contrib efuns:
. string variables(object), object *heart_beats(),
int remove_interactive(object)
* memory leak fixes:
. an array in mudlib error tracebacks
. throw()
. [0..n] array ranges on ref 1 arrays
. functionals keeping programs from freeing
* bugfixes:
. previous_object(-1) after an lfun or functional pointer; an
extra object is no longer mistakenly inserted
. numerous fixes to the pluralize contrib efun
. load_object() doesn't error if the file doesn't exist now,
like the documentation claims
. fixed MUD mode sockets on machines where sizeof(long) > 4
. window sizes with widths or heights of 255
. '/' is now a legal log file directory
. wierd error messages for unterminated @ or @@ blocks
. fixed a bug that truncated arrays/mappings on MUD mode sockets
. replace_program() objects now look like clones again (clonep)
. workarround for a GNU make 'feature' that caused 'can't find
rule for obj/grammar.tab.o' errors
. str[n..] returns "" when n > strlen(str)
* optimizations:
. replace_string(), member_array(), string comparisons, hashing
. shared string deallocations
* COMPAT BUSTERS:
. The following efuns now return their output as strings:
malloc_status(), cache_stats(), lpc_info(), mud_status(),
dump_file_descriptors(), program_info(), debug_info(),
dump_socket_status()
. this_player() no longer exists in some places where it
previously did
. It is now illegal to any of the following from a verb action
which return zero: call remove_action(), destruct an object
which defines commands, move an object which defines commands,
move a living object
. 'foreach' and 'in' are reserved words
. map_mapping() now passes both the key and the value
. get_safe_file_name() is now get_save_file_name(string fname,
object who); this_player() is now zero in it
. previous_object() is now zero in add_action()'ed functions;
this fixes several crashers
Wed May 17 14:54:59 EDT 1995 (tim@handel.princeton.edu (Beek))
* bumped version number to v21.3
* features:
. new ed option 'verbose'
. optional flag to functions() contrib efun gives more extensive
info
. this_user() is now equivalent to this_player()
* fixed crashers in:
. self-destructing objects with call_outs
. call_outs to function pointers
. reload_object() on a swapped object
. reclaim_objects() and function pointers with no arguments
* bugfixes:
. problems with too wide columns in sprintf's column mode
. calling reclaim_objects() no longer corrupts mappings whose
keys contain destructed objects
. classes now save/restore correctly
. various fixes to the configure scripts
. fixed non-typechecked functions to not give type errors
. TELOPT_NAWS fixed to handle zero bytes correctly
. fixed a bug in adding an int to a string
* optimizations:
. explode() and implode()
. counted strings
. eliminated switches over types for all refcounted types
. shared string frees
. read_buffer()
* COMPAT BUSTERS:
. ALWAYS_SAVE_COMPILED_BINARIES removed
. map_mapping() now passes the value, not the key, to the
function pointer
Fri Apr 28 20:24:42 EDT 1995 (tim@handel.princeton.edu (Beek))
* bumped version number to v21.2
* features:
. packages are now specified in options.h; #define
PACKAGE_ANYTHING in options.h will cause packages/anything.c
to be compiled in
. classes can contain instances of themselves now
. NAWS window size negotiation: the callback is
window_size(int width, int height)
. to compile MudOS, now type './build.MudOS' and follow the
instructions
. support for multiple login ports, as well as binary/ascii
ports as well as telnet; see ChangeLog.alpha
. sockets are now initialized before preload() is called so
socket objects can preload normally
* Two new contrib efuns
. store_variable/fetch_variable
* fixed crashers in:
. pointers to void valued efuns
. anonymous function pointers
. set_hide()
* bugfixes:
. fixed a bug where 'continue' would some jump to the wrong
point
. typeof() efun
. a strsrch() hanger
* optimizations:
. assignment to locals
. pushing of call_out arguments
. return zero, loop conditions, logical expressions
. multiple pushes
* source changes:
. merged intermediate programs that edit the source code into one
main program
* COMPAT BUSTERS:
. privs_file() is now called to get new privs for virtual
objects; see ChangeLog.alpha for full details
. a bunch of LPC predefines which weren't of the __FOO__
variety changed names; see ChangeLog.alpha for a list
. 'efun', 'new', and 'asm' are no longer valid variable/function
names
Thu Mar 30 14:56:48 EST 1995 (tim@handel.princeton.edu (Beek))
* bumped version number to v21.1
* three new contrib efuns:
. int replaceable(object) - returns 1 if the object consists only
of a create() function and inherited functions
. void program_info() - prints out memory usage of programs
divided up by sections
. string upper_case() - similar to lower_case(), but ... :)
* fixed crashers in:
. the compilation of switch tables to C code
. duplicate objects in the hash table with LPC objects
precompiled and DEBUG on
. type errors in division
. the inherits() efun
. call_out(function, ...)
. regular expressions that end in '\'
* optimized:
. some of the compile time type checking
. void valued efuns (they are all guaranteed to return zero now
as well)
. mapping operations. A custom allocator was added, which
should decrease mem overhead as well
. changed program ref counts to shorts, saving 2 bytes/program
* removed:
. errorp() efun
. RUNTIME_LOADING in options.h
* bug fixes:
. a division error message that indicated multiplication
. a problem with the types of locals in anonymous functions
. a few errors in smalloc accounting
. type checking involving classes
. it is no longer to illegal to overload a function to have a
different number of arguments
* porting fixes for CX/UX 6.1, IRIX 5.3, amiga
* COMPAT_BUSTERs:
. removed OLD_HEARTBEAT, OLD_COMMAND, IGNORE_STRICT_PRAGMA
. removed STRICT_TYPE_CHECKING; use PRAGMA_STRICT_TYPES
. removed ALWAYS_SAVE_BINARIES; use PRAGMA_SAVE_BINARIES
. move_object() only takes one arg; change
move_object(this_object(), foo) to move_object(foo)
Fri Mar 10 11:03:09 EST 1995 (tim@handel.princeton.edu (Beek))
* bumped version number to v21
* fixes up to v21.1b4 included.
--- Robocoder
* fixed smalloc accounting stats, and small leak in small block handler
* more amiga fixes, and compilation tweaks
* fixed a memory leak in parse_command()
* save size of buffer in binaries.c to cut down on allocations a bit
* a few more fixes to clear_bit() and set_bit()
* fixed the Amiga port to handle problems with read() and
write() macros more cleanly
* fixed some socket problems by changing recv() to read() in
the socket handler
* fixed a problem that would sometimes allocate a string table
that was twice as big as requested
* fixed some OSF/1 V3.0 cc compile problems with source code
formatting
* fixed Alpha crasher with intersect_array() and alist_sort()
-- reported by Dana
* fixed debugmalloc portability problems for AIX - reported by
Curax; and undef'd SBRK_OK automatically for AIX
* added prototypes that were missing in places
* added some include files to fix some implicit definitions
* removed some more unused locals
* otable.c: copied Beek's power of 2 HTABLE_SIZE test for checking
OTABLE_SIZE; increased the max number of characters to hash from
20 to 40, to handle longer pathnames (FWIW, this was 100 in
0.9.20); cleaned up show_otable_status() to be more consistent
with other stats reporting functions
* eoperators.c: copied Beek's f_sscanf() return value fix to
f_parse_command(); also removed a redundant check_for_destr()
* array.h: removed an unused #include (of itself? *boggle*)
* parse.c: bumped refcounts to a couple of arrays before calls to
splice_array(), and rearranged some code to avoid an uninit'd
svalue
* Makefile, GNUmakefile: to find <sys/rusage.h> on Solaris (5.4),
add -I/usr/bsdinclude to OSFLAGS
* malloc.h, smalloc.c: fixed for SBRK_OK defined; and some changes
for the Alpha
* some Amiga tweaks so that the driver actually works there =)
* fixed a crasher in parse_command()
--- Beek
* COMPAT_BUSTER: objects that call replace_program() no longer
return true to clonep() or virtualp().
* fixed a crasher in binaries (program name is now a shared
string)
* fixed some memory accounting errors
* sockets are now closed before calling shutdown, since the
operating system doesn't always close them right
* reorganized the logic of parse.c in places; fixed uncountably
many memory leaks; added a stack of globals so that it doesn't
leak even in the event of an error
* fixed a leak involving destructing users with notify_fail()
messages pending
* fixed a ref count bug in domain/author_stats()
* fixed a problem/crasher in compiling files which can't be opened
* added a non-varargs version of add_message(); profiling shows
that the telnet support is slow without it; generally optimized
and cleaned up sending of telnet codes; use add_vmessage() if
you need varargs support.
* fixed a crasher in referencing local functions/globals from
within a functional in some contexts
* fixed a crasher in string < string
* removed some (unused?) prototypes from lint.h
* fixed a crasher in prototypes in the simul_efun object with no
corresponding procedure
* fixed a bug in the disassembler with non-bindable functionals
* removed outdated MALLOC defines from GNUMakefile
* fixed the error message for reverse sorts of arrays to indicate
that arrays of arrays are legal
* fixed some serious bugs in clear_bit() and set_bit() introduced
while optimizing
* fixed crashers in illegal arguments to snoop(); cyclic etc
* fixed compilation with TRACE defined
* fixed compilation problems with NO_SOCKETS; awaiting better
Amiga patches from Robo :)
* fixed a bug in show_otable_status() that would print information
to this_player()/stdout when memory_info() is used
* fixed the new ed efuns to return "" rather than 0 when there is
no output.
* un-ANSI-ized the source for archaic/lame/braindead compilers
that only understand K&R
* as part of the above, made the dispatching in generate.c use
defines and not token pasting; also optimized a bit
* fixed a typo in lex.c that could crash on extremely long lines
* fixed the case for the -d option with DEBUG off
* COMPAT_BUSTER: previous_object() is now zero when crash() is
called in the master object
* expanded the error messages printed by the creator_file() master
apply; revised it to use apply_master_ob()
* fixed a memory leak in the 'table' feature of sprintf ('%#5s')
* set the tag of linenumbers correctly when they are swapped back in
* removed prototypes for some removed functions, some unused
locals and globals
* added a 'block_or_semi: error' rule to the grammar so that
the back half of the function definition rule is always called
This is important since the function name is saved on the yacc
stack and will otherwise be leaked
* fixed the switch grammar to accept any constant string
expression using () + and concatenation as case labes, same
goes for inherit file names
* fixed some definitions to use Pn()
* small ed tweaks:
. hitting return to get the next line at the end of a file
now prints 'End of file.' and not 'Bad line range.'
. 3,5 is now the same as 3,5p instead of just printing line 3
* COMPAT_BUSTER: slight change to the behavior of having two
variables with the same name in an object:
old one is made static only if the new one is not hidden
(so inheriting an object with private foo; wont make the
variable in the current object static), also if the new
one is hidden, dont make it the 'foo' variable for this
object. Problem reported by Angus.
* fixed #undef OLD_ED compilation
* fixed a crasher in ed_start()
* modified a few references to non-existent files "efuns.h" and
"exec.h"
* fixed a crasher in the optimization of icode (didn't know about
F_SHORT_STRING)
* fixed a bug that caused numbers returned by sscanf() to often
be undefined/null
* fixed a memory leak in constant mappings with duplicate keys
* compilation fix for DEBUGMALLOC but not DEBUGMALLOC_EXTENSIONS
* commented out an unused variable in smalloc.c; also cast sbrk()
to (char *) since I don't know where to find the prototype and
AIX complains ...
* fixed in_edit() to work with #undef OLD_ED
* optimized/made the snoop() code more sensible
* fixed a crasher in call_out(function, ...)
* disabled the report_holes debugging code
* updated the generate_source() efun for symmetry's efun changes
* fixed a bug in loop optimizations:
for (...; local_var < integer_constant; ...)
when local_var was *not* of type int.
* removed the mkdir prototype for SunOS 4.1.x; evidentally it
exists in a standard include now? (blame Dseven if it doesnt)
* fixed the GNUmakefile to create mallocwrapper.c
* put the clear_state() back into backend.c for now
* fixed the source to actually use the BINARIES define; it
was mistakenly using SAVE_BINARIES
* fixed a memory leak in ed regular expressions
* fixed array->foo() to set origin() correctly
* fixed a crasher in locals left behind by errors
* fixed some really odd (and inefficient) logic in address server
callbacks; this implements the multiple query on the same
address fix from 0.8.35 more sanely.
* Added mallocwrapper.c to the GNUmakefile
* fixed a memory leak in array ranges that return ({ })
(array that was indexed was leaked)
* slight optimization to array addition
* fixed a memory leak in array intersection (intermediate table)
* fixed a memory leak in reg_assoc() (regexps not freed)
* fixed a memory leak in PRIVS (not freed when ob destructed)
* fixed a few memory leaks in errors in regular expressions
* in check_memory(), count the shared strings in the ip number
table, count FP_FUNCTIONAL | FP_NOT_BINDABLE as a functional,
count refs inside of function pointers, count refs from input_to
and get_char, print out contents of arrays that are leaked,
count references in swapped objects
* fixed undefinedp() and nullp() to return defined and non-null
answers, respectively
* ( string ) and string + string are legal in case statements
now/again, respectively.
* fixed compilation problems with PROFILE_FUNCTIONS on
* fixed a crasher in set_this_player()
* fixed compilation with NEW_FUNCTIONS off
* fixed a compilation problem with NO_ADD_ACTION and
THIS_PLAYER_IN_CALL_OUT
* fixed a bunch of compilation warnings from gcc re: inline functions
* Fixed replace_program to not crash if called in an object
with expression function pointers. Global variables and
functions can still cause problems tho.
* COMPAT_BUSTER: the values of funtionp() no longer use origin.
use /include/function.h. Now also returns info as to whether
the fp is bindable, and whether it's owner has been dested
* added: function bind(function, object)
returns a function pointer that behaves the same as the one
that was passed to it, except the new function pointer belongs
to the object passed to bind. Security is handled through
int valid_bind(object binder, object old_owner, object new_owner)
(master apply)
* fixed a bug that would dest any user that sent more than 2k
of data to the mud without a pause (pasting into ed, etc)
* fixed some cast problems in the switch code
* fixed binaries and string switch to work on machines with 8
byte pointers (DEC Alpha)
* added in the v20.26b3-4.diffs since whoever released them didn't
include them in an alpha release and I forgot to add them to
mine ...
* extra arguments passed to new (clone_object) are passed along
to create() of the clone.
* fixed the put_* defines to work as single statements
* fixed several bugs in the new ed() functionality
* made reset_object(foo, 0) and reset_object(foo, 1) separate
functions
* added help for '/' and '?' in ed
* fixed a crasher in save_ed_buffer()
* added about 15 more different error messages to ed so it's a bit
more friendly
* added a new interface for ed(), which is used if OLD_ED is not
defined in options.h
. Three new efuns replace ed():
string ed_start(string | void, int | void) - start a new ed
session on file file. ed_start(foo, 1) means use
restricted mode. Only one ed session may be started
per object.
string ed_cmd(string) - send the command line to ed
int query_ed_mode() - returns:
0 - the current object is at a normal ed prompt (':')
-1 - the current object isn't in ed
-2 - the current object is at the more prompt in the
middle of help
>0 - the object is at a prompt for a line. The number
is the line number.
. The string result of ed_cmd() and ed_start() is the output
that would have been sent to the user
. The mudlib is responsible for setting the user's prompt
(see query_ed_mode())
* added an NO_ADD_ACTION define which has the following effects:
. adds an efun: set_this_player()
. removes many efuns:
add_action(), remove_action(), query_verb(),
command(), commands(), enable_commands(), disable_commands(),
living(), set_living_name(), livings(), find_living(),
find_player()
. based on the above, the only way to handle user input is
through the process_input() apply; but this is better than
having add_action(..., "", 1)
. the efuns that need to know if an object is living (say,
tell_room, shout) now send messages to any object that
defines a catch_tell() function.
. note that NO_ANSI has no effect b/c it happens after
process_input is called
. %l removed from parse_command()
* added a NO_WIZARDS define. combined with the following defines
it has the following effects:
. if MUDLIB_ERROR_HANDLER is undefined:
all users are wizards (get verbose error messages)
. if NO_MUDLIB_STATS is undefined:
for the purposes of mudlib stats, no one is a wizard
(the 'moves' field includes everyone)
. if RESTRICTED_ED is defined:
everyone is a wizard (defaults to unrestricted mode)
the mudlib should explicitly start ed in restricted mode
if this is needed
* added call_out(function, ...)
* added apply(function, mixed *) which allows a variable number
of arguments to be passed to the function
--- Symmetry
* Fixed a possible crasher with #pragma show_error_context
* Correctly adjusted total array size and mudlib stats
for slice_array with ref 1 arrays
*** Since v21a3 ***
* Fixed a bug when some efun names are also used as names for
local vars
* Allow $(expression) to be a valid indexable lvalue, i.e.
$(m)[5] = 3 is valid
* Fixed a crasher involving Illegal LHS errors
* Don't call clear_state() within the backend loop
* Allowed
#define FOO\
12
where the \ is right after the macro identifier
* Added a missing check for stack overflow during an apply
call using a ref 1 array for e.g.
* New efuns : unique_mapping(), filter_mapping()
* optimized slice_array()
* Some bug fixes to apply()
* Fixed a constant-folding optimization bug which gave
erroneous results for simple subtraction as in 11 - 2
--- Robocoder
* Fixed a bug in lex.c concerning array blocks
Sat Jan 21 20:25:44 EST 1995 (tim@handel.princeton.edu (Beek))
* raised patchlevel to v20.26
* fixed a problem that would sometimes claim the maximum include
depth was exceeded
* fixed the tags on a bunch of memory allocations
* removed a memory leak in function overloading warnings
* fixed ref count problems/crashers in move_object()/tell_room()
* fixed a crasher in the illegal use of private variables
* added buffer and function support to sameval(), this means
functions and buffers compare equal to themselves for the
purposes of unique_array() and also match themselves as
mapping keys
* added function and buffer support to svalue_to_int(); this makes
buffers and functions as mapping keys more efficient
* == and != can now be used to tell if two buffers or functions
are in fact the same buffer/function
* removed debug_message_svalue(); unused and obviously a throwback
to Larsian days
* Solaris compilation tweaks from Robocoder:
. gcc defines SunOS_5 so we don't have to
. M_ERROR is used; used SPRINTF_ERROR() instead
* Fixed the contrib efuns to compile again
* Added some Linux compilation fixes received from marius (?)
* removed a redundant apply to #global_init#
* Fixed a compilation problem with call___INIT
* Fixed a crasher using the 128th thru 255th string constant
in an object
* Fixed a crasher in $() outside function pointers
* Fixed warnings for clashes between functions inherited at
different branches to not be printed if the function is
overloaded, or either of the inherited functions is private.
* Fixed nomask to give errors correctly regardless of inheritance
order
* Fixed a bug in member_array() that caused member_array(x, "")
to give an error
* Fixed the undefined function error message to not give a
redeclaration error if the function is defined later
* Fix a crasher on evaluation of anonymous functions in an
inherited program
* Fixed a crasher in make_range_node
* added map(string, ...) works just like map_array, except it
works on the characters that make up the string. If the return
value is not an integer or is zero, that character is left
unchanged.
* removed the ancient ref count checking code
* the -d option is now only available when the driver is compiled
with DEBUG on
* added add_action( function, string ), updated commands() to
return "<function>" for function pointer commands
* added input_to( function ) and get_char( function )
* fixed the inherit from multiple branches warning o actually work
* fixed a bug in inheriting nomask functions
* fixed a few problems with nested calls to expression or
functional function pointers, and dangling of pointers when
the associated program objects swap.
* fixed a ref count bug in string constants for string cases
* added check_memory(1) which also prints out a summary of all
allocated memory
* changed shared string ref count debugging code to allow tracking
of a particular string
* several changes to DEBUGMALLOC:
. changed the tag numbers to be meaningful
. use temporary tag info to find leaked blocks with the
memory_check() efun (available with DEBUGMALLOC_EXTENSIONS)
. added magic numbers to start and end of blocks to catch
corrupted blocks
. added code to check all ref counts and allocated blocks
* changed program names to be shared strings
* changed call_other cache entry names for missing functions
to be shared strings
* Fixed a memory leak in (s)printf which leaked 8 bytes per %O
and per (null)
* converted swap.c to use DXALLOC and FREE
* added ALLOCATE, CALLOCATE, RESIZE, RESIZE_VECTOR defines to
simplify code; note that CALLOCATE does *not* zero the memory
* move compilation info about functions to a stack so they can
be pushed so we can do anonymous functions
* added support for pass-by-value to function pointers. The
syntax is $(expression), where "expression" will be run when
the function pointer is made, not when it is evaluated.
Note the difference between (: this_object() :) and
(: $(this_object()) :)
* added anonymous functions. The syntax is:
function( <argument list> ) { <code> }
for example:
create() {
function f;
f = function(int x) {
int i;
for (i = 0; i < x; i++) { write(i+""); }
};
evaluate(f, 10);
}
* fixed a few bugs/crashers regarding the number 0x80000000