forked from ldmud/ldmud
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHISTORY
1989 lines (1852 loc) · 103 KB
/
HISTORY
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 lists all changes to the game driver which have a visible
impact on its behaviour both towards the mudlib as well as towards
the host system.
For a detailed list of all changes see the file CHANGELOG.
xx-xxx-2009 (LDMud Team) -- 3.5.0
- Fixed Crashes
+ xml_generate(), xml_parse() could crash the driver due to a wrong
order during initialization of libxml2 (#671) and could lead to
memory corruption, because the memory used by libxml2 was subject to
the garbage collector and would be free'd by it while still in use.
+ get_type_info() lost refcounts to the function name of a closure,
causing it eventually being free'd prematurely (#712).
+ 'dumpallobj' crashed if there are strings with 0 refcounts (#725).
+ fixed a crash during tracing caused by a wrong call to add_message()
in do_trace(), when compiled with --enable-debug (#736).
- Changed Efuns:
+ add_action(): The function can be given as a closure. (#243)
+ command(): Won't throw an error anymore when a static function
in another object is called. Such an action will simply be skipped.
+ get_dir(): prepend '/' in plain mode for entries in the root directory,
if paths are requested by GETDIR_PATH.
+ explode() always returns a non-empty array, even upon explode("","")
(#180).
+ sort_array() will sort in-place instead of a copying the array first,
if the array is passed as reference. (#224)
+ to_struct() can convert a struct into another one if one of them is
a (indirect) base of the other. (#646)
+ restore_object() checks if the types of restored data are compatible
with the declared types of variables, if runtime type checks are
enabled in the program of the object.
+ clone_object() does not deactivate an active heart_beat in a
blueprint. (#747)
+ Fixed result of convert_charset(): returns now the unchanged string
if it gets an empty string for conversion. (#739)
+ tls_init_connection() supports outgoing connections also with GnuTLS.
- Removed Efuns:
+ The deprecated efuns cat() and tail() were removed. They can be
easily and more flexibly replaced by sefuns, which are supplied with
the driver. (#637, #228)
- New Efuns:
+ json_parse() parses strings encoding a JSON object into an
appropriate LPC value. (optional efun)
+ json_serialize() converts a LPC value into an JSON object and
serializes it as LPC string. (optional efun)
- Portability
+ Removed built-in PCRE package, because it was awfully out of date.
Since libpcre is installed on nearly every halfway POSIX compatible
system, we just link against the system libpcre. If there is none
available, no PCREs are available in the driver (#658).
+ Removed a bunch of checks and own fall-back implementations for
functions required by C89/90/99 or POSIX.1. We just require them.
+ The data from the bytecode is not written/read byte per byte and
combined by shifting and masking anymore, but by reading the
specific type directly. This should not have endianness issues, as
long as compiled bytecode is not transferred to a different machine.
But Alignment issues may arise on some system.
+ The bytecode uses fixed-size integer types from C99.
+ Entities in the bytecode are getting their semantic types (like
bc_offset_t).
+ Take more care of issues with different width of integers in the
bytecode (e.g. long was regarded as 32 bit until now).
+ Improved detection of working sbrk/brk() and malloc replaceability.
Enabled the possibility to replace malloc while using mmap()
independently of the old SBRK_OK. (#680)
- Runtime
+ re-worked and consolidated hash functions and hash types. (#564)
+ re-worked string hashing to use dedicated hash types and MurmurHash2.
This is about 5 times faster than our old hashing algorithm and
supports hashes with more than 16 bit width. This supports larger
hash tables than 65535.
+ The ptmalloc memory allocator was removed. (#552)
+ The interpreter checks for the correct types of function arguments
upon function calls, if runtime type checks are enabled for the
program defining the function (and save_types is used as well).
(experimental feature)
+ The intrepreter checks for the correct type of return values when
returning from a lfun or sefun, if runtime type checks are enabled
for the program defining the function (and save_types is used as
well). (experimental feature)
+ When the driver receives SIGTERM, SIGINT, SIGHUP, SIGUSR1 or SIGUSR2
it calls handle_external_signal() in the mudlib master. If the master
does not handle the signal, the driver defaults back to the standard
behaviour.
+ Heartbeats were called only when players are logged on. They are now
called regardless of logged-on players.
However, the mudlib can activate/deactivate the calls to heartbeats
globally by using configure_driver(). (#731)
+ Improved the determination of the drivers current_time which fixes
issues with wrongly timed heart_beats or apparantly wrong timings.
(e.g. #743)
+ A profiling feature for detecting long executions was introduced. It
can be configured with configure_driver().
- Language
+ Added a sefun:: specifier to explicitly call simul-efuns. (#669)
+ structs are always enabled. (#557)
+ 'new' inline closure are always enabled. (#557)
+ Added two new pragmas:
'rtt_checks', which will enable type checks at runtime.
'no_rtt_checks', which disables runtime type checks.
+ A base struct is recorded as base struct in a child struct even if
the base struct has no members. (#695)
+ The behaviour of the pragmas combine_strings, verbose_errors and
local_scopes are mandatory. These three pragmas plus their no_*
variants are ignored.
+ The pragma warn_deprecated is no enabled by default.
+ A new modifier 'deprecated' can be used to mark lfuns, sefuns and
global variable as deprecated. Using/Calling them will cause
warnings.
+ 'float' variables on LP64 architectures (64 bit) now have the same
precision as 'double' in C (the driver uses internally 'double'
instead of the traditional self-built format).
+ Implemented union types. (#721)
- Networking
+ UDP datagrams with lengths up to 65507 (including UDP and IPv4
headers: 65535) bytes are supported.
- Other
+ The driver requires a C99 compatible build system. Some checks and
work-arounds for non-C99 were removed.
+ A bunch of statistic counters (string handler, object table, swapper,
network layer,...) were changed to a larger type to prevent them from
overflowing. (#521, #608)
+ Renamed some command-line flags to match the LPC defines better (#704)
--heart-interval -> --heart-beat-interval
--sync-heart -> --synchronous-heart-beat
--async-heart -> --asynchronous-heart-beat
--no-heart -> --no-heart-beat
+ A new savefile format (version 2) was added to store the new 'double'
floats losslessly. It additionally is simpler to write/restore and
makes the savefiles more compact because only one representation of
the float value is stored.
30-May-2009 (LDMud Team) -- 3.3.719
- Fixed Crashes:
+ gmtime(), localtime(), ctime() and strftime() could crash the driver
on platforms where time_t is 64 bits long and users supply huge
values as time stamp (>2^55) due to unchecked results from libc
functions (Bug #587).
+ Fixed a bug in esbrk() during memory allocation, where SINT
(sizeof(word_t)) was not taken into account in the calculation of a
block size, leading to crashes afterwards. (#611)
- New Efuns:
+ configure_interactive(): To set options for interactives.
+ configure_driver(): To set settings/options for the driver itself.
- Changed Efuns:
+ idna_stringprep(): fixed the evaluation of the arguments and removed
a memory leak (#498).
+ map(): it's now possible to specify a mapping column when mapping
through mappings (#367)
+ tls_check_certificate(), tls_refresh_certs(): Now available if
GnuTLS is supported.
+ hash() and hmac() is now always available und is able to use OpenSSL,
libgcrypt or internal MD5 and SHA1 routines (builtin routines for
hash() only). hash() costs 10 ticks per iteration.
+ md5() and sha1() are obsoleted by hash().
+ lambda() now supports bound and unbound lambdas as the first element
in an array of a lambda expression.
+ xml_generate(), xml_parse(): Also available using libxml2.
+ cat(): marked as deprecated (#637)
- Runtime
+ The --max-malloced memory limit was renamed to --hard-malloc-limit.
+ Introduced new --soft-malloc-limit in addition to the hard one.
+ When exceeding the soft memory limit, the function low_memory() is
called in the mudlib master with details about the kind of low memory
situation. This check is done during the backend cycle and not at
'real-time'.
+ Made the maximum length of commands configurable at compile-time
(MAX_COMMAND_LENGTH, --max-command-length)
+ The driver hook H_MSG_DISCARDED can be used to specify the messages
given to players when their messages were discarded.
+ The soft and hard memory limits can now be configured at runtime
(configure_driver()).
- Language
+ Added a permanent define __MAX_COMMAND_LENGTH__ for the maximum
length of command.
+ Added a permanent define __GCRYPT__ when libgcrypt support is
available.
- Portability
+ Savefiles are written in binary mode, if the host system supports any
such notion (O_BINARY exists). Additionally, they are read as binary
as well, if it is supported. (Note: POSIX conforming systems do not
distinguish between 'text' and 'binary' modes, this is only relevant
to Cygwin.)
+ Fixed a major bug on 64 bit platforms, where floats with negative
exponents were saved incorrectly leading to data corruption (#627).
+ Removed the whole hosts/ directory because it wasn't maintained for
a long time and most of the systems were anyway dead for a long
time (#625).
This removed --enable-use-system-crypt as well (#624).
+ Removed checks and special code for OS2 and __EMX__.
+ Removed checks and special code for MSDOS.
+ Removed checks and special code for BeOS.
+ Removed checks and special code for AMIGA.
+ Removed checks and work-arounds for very old gcc compilers
(2.x, <3.2).
+ Removed checks and special code for SunOS4
+ Removed checks and special code for Ultrix.
+ Removed MSDOS filesystem semantics (Checks for MSDOS_FS and special
behaviour (e.g. \\ as path separator).
+ Support for using mmap() to get memory from the system (slaballoc),
because brk()/sbrk() are more or less deprecated and not supported by
some systems (e.g. Darwin/MacOS). (#640)
+ Support for using mmap() to get memory from the system (smalloc).
(#640)
- Other
+ Generalized the write buffer for non-threaded use and renamed the
configuration option '--with-pthreads-write-max-size' to
'--with-write-buffer-max-size'.
+ Removed background threads that sent the data to the network
and with it the '--enable-use-pthreads' configuration option.
+ The commandline options '--access-file' and '--access-log'
specify the access permissions and log file, activating or
deactivating access control and log. The old configure options
'--enable-access-control', '--with-access-file', '--with-access-log'
and their config.h symbols ACCESS_FILE and ACCESS_LOG just give
the default values.
+ The default path of TLS certificates are now configurable during
compile time (--with-tls-keyfile, --with-tls-certfile,
--with-tls-trustfile, --with-tls-trustdirectory, --with-tls-crlfile,
--with-tls-crldirectory), these TLS features can also be deactivated
by giving "no" during compile time or "none" as a runtime parameter.
+ Ed sessions are removed when an object becomes non-interactive.
+ Multiple ed sessions per interactive are allowed.
+ Check the compiler for support of -fwrapv and enable if supported.
Enables a fully defined overflow/wrap behaviour of signed integers
(#635)).
12-Jan-2009 -- 3.3.718
- New Efuns:
+ mktime(): convert a date/time information as returned by local_time()
to a unix timestamp (integer value).
+ strftime(): convert a timestamp to a formatted string using a format
string with a variety of format specifiers.
+ xml_generate(), xml_parse(): Optional XML support.
- Changed Efuns:
+ present_clone(): the efuns now optionally searches for the <n>th
object in <env> instead of the first one.
+ debug_info(): can be used to query the current stack control depth
with DIT_CURRENT_DEPTH (LPC recursion depth).
- Runtime:
+ random(): Uses now a new random number generator (SFMT) see below.
+ sprintf(): Can now print values larger than 2^32-1 if the driver is
compiled on 64 bit platforms.
- Fixed Crashes:
+ filter(), save_object(), restore_object(), send_erq(), send_udp(),
db_conv_string(), regexplode(), regexp(), process_string(),
present_clone(), load_object(), rename_object(), replace_program()
could crash the driver due to stack overflows, when large string were
used as arguments.
- Language
+ Disallowed case labels in inner blocks of switch statements
and variable declarations that cross case labels.
- Other
+ Exchanged the Mersenne Twister (pseudo random number generator) by
the SIMD-oriented Fast Mersenne Twister (SFMT) to support random
numbers up to 2^63-1 on 64 bit platforms.
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/
Additionally, the period length can be configured now at
compile-time. The SFMT faciliates a better equidistribution and a
faster recovery from a 0-excess state as well. (Bug #527)
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/
+ Added the possibility to seed the PRNG from arbitrary files or
devices by using the commandline option --randomdevice. The default
device is /dev/urandom. If that is not readable, the driver falls
back to seed the PRNG with the system time (Bug #515).
+ The driver dumps a core now even if the master object is not loaded.
+ New configuration option '--enable-eval-cost-trace' to show the
evaluation costs in the stacktrace.
10-Aug-2008 (Lars Duening) -- 3.3.717
- Changed Efuns:
+ md5(): The efuns costs 10 eval ticks per iteration (Bug #485).
+ sha1(): The efuns costs 10 eval ticks per iteration (Bug #485).
+ strrstr(): A starting position of the input string's length
led to the target string never being found (Bug #509).
- Compiler:
+ After two consecutive inline closures within the same
function, the line number information was incorrect (Bug #510).
+ Corrected an off-by-one linenumber error related to
auto-include strings (Bug #508)
- Other:
+ Improved the removal of actions added by shadows (Bug #514).
14-Oct-2007 (Lars Duening) -- 3.3.716
- Changed Efuns:
+ load_object(): The object name must not be empty (Bug #500).
- Fixed Crashers:
+ Size-changing mapping operations didn't fully check for destructed
objects as keys, sometimes derefencing invalid pointers in
the process (Bug #517).
+ Removed a crasher when running with --check-refcounts: References
by snooping non-interactives weren't counted (Bug #492).
+ Loading an object with an empty name twice could crash the
driver (Bug #500).
+ clone_object(): When initializing a clone's variables
using #pragma share_variables, really use the variables from the
blueprint object being given. This allows the handling of
inherited blueprint objects with replaced programs. (Bug #483)
+ An argument mismatch error during a lfun-closure call could
crash the driver. (Bug #495).
+ The definition 'struct abc abc;' could crash the driver. (Bug #494)
+ The use of local undefined structs as 'struct abc abc = (<abc>)'
could crash the driver. (Bug #493)
- Compiler:
+ The lfuns backing the inline closures are again 'private nomask'.
- Runtime:
+ foreach(int i: <num>) recognizes if <num> is negative and throws
an error. (Bug #503)
+ The handling of charmode with combine-charset could lead to
premature socket closing if present with longer data than the
input buffer could at one time. (Bug #442)
+ The Apply-Cache statistics counters should overflow less often
(Bug #520).
+ If a simul_efun object appears before being 'blessed', that
object is rejected to avoid variable/function inconsistency bugs.
(Bug #489).
- Other:
+ The autoconfiguration of YACC was incompatible with gentoo Linux.
+ Removed a few (partly fatal) 64-bit issues (Bug #490, #491).
+ Removed a memory leak when catching errors inside
master::runtime_error() (Bug #513).
30-Sep-2007 (Lars Duening) -- 3.3.715
- New Efuns:
+ tls_refresh_certs(): Reload the certificates and certificate
revocation information.
- Other:
+ New commandline options to handle certification revocations:
--tls-crlfile <pathname>
Use <pathname> as the filename holding your certificate revocation
lists. If relative, <pathname> is interpreted relative to
<mudlib>.
--tls-crldirectory <pathname>
Use <pathname> as the directory where your certificate revocation
lists reside. If relative, <pathname> is interpreted relative to
<mudlib>.
09-Jul-2006 (Lars Duening) -- Release 3.3.714
- New Efuns:
+ hash(): Available if OpenSSL is supported, this efun calculates
hashes for various methods.
+ hmac(): Available if OpenSSL is supported, this efun calculates
HMACs for various methods.
- Changed Efuns:
+ save_value(), restore_value(), save_object(), restore_object():
lfun closures are now saved with their inheritance path to
allow proper restoration under complex circumstances.
+ tls_check_certificate(): GEN_DNS, GEN_EMAIL and GEN_URI
certificates are supported.
- Language:
+ <array> & <mapping> implements the intersection of the
array with the indices of mapping.
- Fixed Crashers:
+ Lfun closures now keep proper track of which program
they belong to.
+ Apply cache entries for non-existing functions could lead
to memory corruption as result of garbage collection.
- Compiler:
+ If a non-virtual baseclass was inherited multiple times
with a virtual class inside the inheritance tree, its members
were merged even though they shouldn't.
+ The type tracking was improved so that variable initializations
like 'int i = to_int( ({float})0 );' compile correctly.
+ New macros __OPENSSL__ and __GNUTLS__ offer insight as to
which TLS package is being used.
- Other:
12-Mar-2006 (Lars Duening) -- Release 3.3.713
- New Efuns:
+ sl_close(), sl_open(), sl_exec(), sl_insert_id(): Optional SQLite
support.
+ idna_stringprep(), idna_to_ascii(), idna_to_unicode():
Optional International Domain Name support.
- Changed Efuns:
+ function_exists(): The 'FEXISTS_ALL' result also contains
information about the function's type, flags, and number of
arguments.
+ present(): Modified the <n> search behaviour so that the
numbering is applied over both inventory and environment
together. Before, the numbering was individual in each
space, leading to situations where low-numbered objects in the
environment were hidden by those in the inventory.
+ sscanf(): The new modifier '+' requires the matching of
the characters after a field in order to consider the field
as matched.
+ tls_check_certificate(): Returns more informative results.
- Master Object:
+ disconnect(): The remaining input data is passed as the second
argument.
- Language:
+ Inherited private functions are now more invisible and
can cleanly be hidden by publich functions.
+ Simul-efuns can only be called when they are public. This
is to enable the construction of simul-efun objects via inheritance:
this way they can use protected functions internally without
having to make them available to everybody.
+ Preprocessor macro __SQLITE__ is defined if SQLite support is
available.
- Runtime:
+ The tracedepth was calculated incorrectly for efun closures
and callbacks.
+ Removing an interactive as part of a fatal comm error clobbered the
current object.
+ Removed the stipulation that CATCH_RESERVED_COST must be twice as
much as MASTER_RESERVED_COST, since the master reserve is used
automatically anyway.
+ Missing returns are logged at runtime only once per function
and occurance.
+ If the master:;connect() initiates a secure connection
which gets stuck in the handshake, neither logon() is called nor
is the prompt printed. Also, if the tls_init_connection() didn't
set a callback, the driver will provide a callback to logon().
This way logon() won't be called unless the connection is up
and running.
- Other:
+ The makefile is able to install the driver's LPC header
files as well.
24-Nov-2005 (Lars Duening) -- Release 3.3.712
- Changed efuns:
+ Removed obsolete and deprecated efuns: add_verb(), add_xverb(),
allocate_mapping(), copy_mapping(), efun308(), extract(), file_name(),
filter_array(), filter_mapping(), m_sizeof(), map_array(),
map_mapping(), mapping_contains(), member_array(),
set_auto_include_string(), slice_array().
+ catch(): If there is not enough time left (less than
__CATCH_EVAL_COST__), this is thrown as an error from inside
the catch instead of causing the catch to return 0.
+ catch(): Modifier 'reserve <expr>' can be used to specify a computing
reserve different from __CATCH_EVAL_COST__.
+ copy(), deep_copy(), get_type_info(), to_array(), to_string():
Added struct support.
+ add_action(): Historical usage with just one argument no longer
supported.
+ assoc(), insert_alist(), order_alist(), intersect_alist(): Optional
as package 'alists'.
+ call_out(): The minimum delay can now be 0, meaning: as soon as
possible.
+ debug_info(): Option DINFO_DUMP:"memory" to dump a list of
all allocated memory blocks (currently supported just by
smalloc).
+ debug_info(): Added more data to the option DINFO_DATA:DID_MEMORY
result.
+ debug_info(): DINFO_DATA:DID_ST_PACKETS_IN and DID_ST_PACKET_SIZE_IN
are the statistics for the incoming network traffic.
+ deep_inventory(): The result can be restricted to a certain
depth.
+ filter(): The efun can now filter strings as well.
+ function_exists(): now also returns the filename and
linenumber of a function.
+ garbage_collection(): An optional flag argument allows to change
the name of the default GC log file.
+ get_type_info(): The name of the defining program of a lfun or
context closure, or the function name itself can be returned.
+ map(): The efun can now map strings as well.
+ make_shared_string(): Deprecated.
+ member(), rmember(): The start position for the search can be
specified.
+ mkmapping(): Convert structs to mappings, too.
+ pg_*(): Postgres efuns trigger a privilege violation ("pgsql", "<efun
name>").
+ process_string(): Spaces are now allowed in function arguments
and no longer terminate the function specification.
+ regexp(), regexplode(): Optionally take RE interpretation options.
+ regexplode(): New flag RE_OMIT_DELIM allows to omit the matched
delimiters from the result.
+ send_erq(): ERQ callback closures can now accept the data as
a string instead of an array.
+ sprintf(), printf(): Formats %O and %Q print floats always
with a decimal point.
+ say(), tell_room(), tell_object(): The efuns can now take a mapping,
an object or a struct instead of an array to use with the
catch_msg() mechanism.
+ transfer(): Available (in compat mode) only when USE_DEPRECATED
is in effect.
+ unique_array(): The separator function can now be a closure,
and can also be given extra arguments.
+ wizlist_info(): Added the number of mappings to the result.
+ write_file(): Allowed to remove the file before writing.
- Corrected efuns:
+ restore_object(): An exception during the restore no longer has the
danger of leaking values and memory.
+ unique_array(): An exception during the process no longer has the
danger of leaking values and memory.
- New efuns:
+ baseof(): Test the relation between two structs.
+ call_direct(), call_direct_resolved(): To perform calls which
are not resolved by a default method.
+ convert_charset(): Convert a string between character sets.
+ match_command(): Find all matching actions for a command.
+ md5_crypt(): Compute an Apache-compatible password encryption using
the MD5 message digest algorithm.
+ pg_connect(), pg_query(), pg_pending(), pg_conv_string(), pg_close():
Optional: PostgreSQL support.
+ regmatch(): To match a string against a regexp and optionally retrieve
the match results for subexpressions.
+ regexp_package(): Returns the currently selected default
regexp package.
+ reverse(): Reverse the content of an integer, a string or an array.
+ sha1(): Compute the SHA1 message digest.
+ struct_info(): Return information about a struct.
+ structp(): Predicate efun to detect structs.
+ to_struct(): Convert an array into a struct.
- Master Object:
+ Function runtime_warning() is called for runtime warnings.
+ privilege_violation(): For "set_limits" and "limited" the resulting
limits are passed as argument.
+ During the compilation of the master object, simul-efuns are disabled
(so they won't be used by accident).
- Fixed Crashers:
+ The driver crashed when a private lfun shadowing
a public sefun was virtually inherited twice in parallel.
+ When walking over a mapping of width 1, deletions from the mapping
from within the walk_mapping callback could cause walk_mapping() to
pass invalid pointers to the callback on later iterations.
- Language:
+ Strings can hold all characters, including '\0'.
+ New operator '...' to flatten array arguments in function call
argument lists.
+ foreach() can loop over references, allowing the loop to change
the base data.
+ foreach() can loop over an integer expression, implementing a counted
loop.
+ 'nosave' is now an official feature.
+ New indexing method '[>]' to index either from the beginning or
the end, depending on the sign of the index value.
+ New pragma 'range_check' allows to check array range indexing at
runtime.
+ If a value of the wrong type is passed to switch(), the driver
no longer throws a runtime error, but instead jumpgs to
the default case.
+ Operators '|' and '|=' can compute the union of two arrays.
+ Operators '^' and '^=' can compute the symmetric difference of
two arrays.
+ Closure operators #'| and #'^ can take more than two arguments.
+ Support for structs; preprocessor symbol __LPC_STRUCTS__ is defined.
+ Preprocessor symbol __PCRE__ is always defined.
+ Real inline closures; preprocessor symbol __LPC_INLINE_CLOSURES__ is
defined.
+ New macro __BOOT_TIME__ expands to the time() the driver was
started.
+ Blueprint variables are now always initialized using
__INIT(). Clone variables are usually initialized the same
way, however with the pragmas 'share_variables' and
'init_variables' the programmer can instruct the driver on
a pre-program basis to initialize the variables of clone
from the current values of the corresponding variables in
the blueprint.
+ If the function definitions in two inherits differ in their
visibility, the compiler emits a warning.
+ Bugfix: The type recognition of the variables for a foreach()
no longer gets confused by visibility flags.
- Runtime:
+ Revamped the string handling to use refcounted strings everywhere.
+ If input is requested in CHARMODE, the NL characters are passed
verbatim to the caller (old drivers passed an empty string
instead).
+ The driver hook H_DEFAULT_METHOD can be used to resolve
call_other()/call_resolved()s to non-existing functions.
+ The driver hook H_DEFAULT_PROMPT can be used to specify a
default prompt different from "> ".
+ The driver hook H_PRINT_PROMPT can be used to do special magic
when printing the prompt.
+ The driver regularly checks the variables of all objects
for references to destructed objects and removes them; it is
therefore no longer necessary to "clean" mappings by hand.
+ The driver can now warn about missing return statements for value
returning functions (this applies only for functions with a
specified return type). If possible the driver tries to detect this
situation at compile time, but also inserts a special 'return'
bytecode to catch certain pathological cases at runtime.
The check can be controlled the pragma '(no_)warn_missing_return'.
+ New runtime 'limit' LIMIT_COST to control how much
a limited execution should cost.
+ Both the traditional and PCRE regular expressions can be used
at runtime, with the selection being made by extra option
flags.
+ The basic timing granularity and the heartbeat interval time
can be configured at compile time and with the commandline options
"--alarm-time" and "--heart-interval". The values are available in
LPC with the macros __ALARM_TIME__ and __HEART_BEAT_INTERVAL__.
+ Heartbeats can be executed synchronously (all at the same time as far
as granularity allows, regardless of when inside one hb interval
they have executed last). The commandline options are
"--sync-heart" and "--async-heart"; if enabled, the macro
__SYNCHRONOUS_HEART_BEAT__ is defined.
- Other Changes:
+ The input escape character can be configured at compile time to
something different from '!'.
+ The MAX_MAPPING configuration parameter now determines the total
number of elements (keys + values) a mapping can hold, not just
the maximum number of keys.
+ The driver can be configured to use either the traditional
regular expression code, or the PCRE package (default).
+ The threadsafe ptmalloc is now available as allocator choice (
though it doesn't support GC yet).
+ New commandline options '--share-variables' and
'--init-variables' to define the default for clone variable
initialization.
+ New configuration option '--enable-malloc-sbrk' to selectively allow
the memory allocator to use sbrk() instead of malloc() where
available (default is to allow sbrk()).
+ New commandline options '--tls-key' and '--tls-cert' to define the
x509 key- and certfile for the TLS package.
+ New commandline option '--max-mapping-keys' to determine separately
the maxinum number of entries in a mapping.
27-Nov-2005 (Lars Duening) -- Release 3.2.12
- Changed efuns:
+ md5(): Accept number arrays as arguments as well.
+ md5(): Accept the number of iterations as optional argument.
+ function_exists(): The 'FEXISTS_ALL' result also contains
information about the function's type, flags, and number of
arguments.
+ tls_check_certificate(): Return the low-level API results, and throw
an error if the connection is not secure.
+ sscanf(): Added test whether the constant characters after
a %-field also match - if not, the %-field is considered unmatched.
- Corrected efuns:
+ call_out(), input_to(): Local references are no longer
accepted as extra arguments.
+ restore_value(): Restoring one-character operator closures
in arrays works again.
+ set_environment(): Clear the RESET_STATE flag of
of the moved object's original environment, if any.
+ to_int(): No longer accepts "x<num>" as valid sedecimal notation.
- Master Object:
+ runtime_error(), heart_beat_error(): A new argument 'caught'
signals if the error is caught or not.
- Fixed Crashers:
+ Freeing a deeply nested value structure no longer overflows
the local stack.
+ An error during the fatal() processing will be treated
as a double-fatal.
- Language:
+ foreach(): When looping over a mapping with no values, or with
only the index being extracted, the loop actually loops over the
mapping and not just the indices copied into an array.
13-Feb-2005 (Lars Duening) -- Release 3.2.11
- Changed efuns:
+ db_*(): mySQL efuns trigger a privilege violation ("mysql", "<efun
name>").
+ get_dir(): New flags GETDIR_ACCESS and GETDIR_MODES to return
the file access times and file modes.
+ input_to(): New flag INPUT_NO_TELNET to modify the INPUT_CHARMODE
behaviour.
+ input_to(): New flag INPUT_APPEND to queue input_to()s.
+ tell_object(): The efun can now take an array as second
argument, and then calls catch_msg() in the target.
+ present(): The argument form (str, n) allows for ids with embedded
numbers.
+ shutdown(): Added an argument to set the process exit code.
+ to_int(): The base prefixes '0x', '0o' and '0b' are supported.
- Corrected efuns:
+ deep_copy(): Deep-copying mappings with shared arrays as keys
could corrupt memory.
+ net_connect(): On multi-homed machines, the created socket
is bound to the hostname given at program start.
+ save_object(): Matching the documentation, the efun really removes
a trailing '.c' from the filename.
+ save_{value, object}(), restore_{value, object}(): Some operator
closures could not be saved and restored.
- New efuns:
+ tls_query_connection_state(), tls_query_connection_info(),
tls_init_connection(), tls_deinit_connection(), tls_error(),
tls_available(), tls_check_certificate():
Optional: Support for TLS connections.
- Fixed Crashers:
+ A shadow executing remove_action(1, shadowee).
+ A too-large allocation (like in " "*MAX_INT) no longer crashes the
mud unless done in SYSTEM allocation mode.
+ Allocating an array enough elements to exceed the internal numeric
limits.
+ Warnings printed during the generation of a closure crashed the
driver.
+ The traceback generation was limited by the array limits, and thus
could throw an error again.
+ to_array('symbol) caused a crash.
+ An error in save_{object, value}() followed by a GC left
behind an invalid pointer.
+ Error while loading an object with a too-long filename.
+ Restoring non-existing (simul-)efun closures created illegal
closure values.
+ Specifying a fieldsize or precision beyond the numerical limits
in sprintf()/printf().
+ Indexing a 0-width mapping yielded invalid values.
- Language:
+ The macros __FLOAT_MIN__ and __FLOAT_MAX__ gave a too-small range.
+ New pragma (no_)warn_function_inconsistent to control the handling
of function redefinitions which differ in return or argument types.
+ Implemented closures explicitely referencing inherited functions
("#'super::fun").
- Runtime:
+ Closures now work correctly when used as mapping keys.
+ The tracedepth wasn't calculated correctly.
+ A 'Command too long' error now also prints the beginning of the
offending command as debugging aid.
+ Corrected a number of memory leaks in runtime errors.
+ Corrected a memory leak in MCCP.
+ An error during a call-out causes all pending call-outs for the
same user in the same cycle to be re-scheduled to the next cycle.
+ If an ERQ callback accepts an array, the numbers in the array
are all positive in the range 0..255.
+ Float variables without an initializer are now properly initialized
to float-0 instead of number-0.
+ Calls from destructed objects to other objects (including simul-efun
calls) elicit a warning.
+ The garbage collection now zeroes out closures found to be bound to
destructed objects. The old behaviour was to change them into 'undef'
closures.
13-Apr-2004 (Lars Duening) -- Release 3.2.10
- Changed efuns:
+ debug_info(): Removed the DID_MEM_UNUSED value from the DINFO_DATA:
DID_MEMORY result.
+ debug_info(): Added the DID_ST_MB_ values to the DINFO_DATA:
DID_STATUS result.
+ debug_info(): The DINFO_DATA:"objects" dump also lists the object
creation times.
+ debug_info(): Added DID_ST_BOOT_TIME to the DINFO_DATA:DID_STATUS
result.
+ debug_info(): Added a third argument to DINFO_OBJLIST to return
multiple objects.
+ function_exists(): now also returns the filename and linenumber
of a function.
+ remove_action(): It is now possible to remove all actions
an object defines.
+ save_object(), save_value(): The format of the saved data can
be specified with an function argument.
+ set_connection_charset(), set_combine_charset(): Passing 0 as
argument re-establishes the default charset.
+ sprintf(), printf(): Modifier '#' for '%O'/'%Q' prints the values
in a compact format.
+ sprintf(), printf(): Format specifier '%b' prints a number
in binary notation.
+ wizlist_info(): The evalcost statistic is now split into 'ticks'
and 'gigaticks', and a second non-decaying evalcost statistic
has been added.
- Corrected efuns:
+ find_call_out(): No longer throws an error when passed an unbound
lambda to look for.
+ m_add(): Fixed a memory leak when existing entries were overwritten.
+ remove_input_to(): The proper noecho state is restored after
removing a pending input handler.
+ restore_object(): The function leaked memory when restoring from
a MALLOCed string.
+ to_array(): When converting a string, the characters are treated
as unsigned.
- New efuns:
+ enable_telnet(): Enable or disable telnet for an interactive
object.
+ master(): Return the current master object.
+ m_entry(): Return all values for mapping entry at once.
+ start_mccp_compress(), end_mccp_compress(), query_mccp(),
query_mccp_stats(): Optional: MCCP support.
+ net_connect(): Open a TCP connection.
+ rmember(): Search arrays and strings from the end.
+ get_combine_charset(), get_connection_charset(): Query the
combine resp. connection charset.
+ get_max_commands(): Query the allowed command rate of an
interactive object.
+ set_max_commands(): Set the allowed command rate of an
interactive object.
+ strrstr(): Search a string within a string backwards.
+ variable_exists(): Check the existance of a named variable.
+ variable_list(): Return all variable names of an object.
- Master Object:
- Fixed Crashers:
+ Using 'break' or 'continue' in large programs caused bytecode
corruption.
+ Function calls by address and global variable accesses are no
longer possible after set_this_object().
+ Overflowing the value stack during a secure_apply() could
crash the driver in the error recovery.
+ walk_mapping(): If the callback object was destructed
before the first call, the efun crashed in the error handling.
+ Swapping of volatile strings could crash the driver.
+ H_COMMAND specifying an lfun by name which doesn't exist
in the interactive object.
+ Using function_exists() or variable_exists() on a destructed
object.
+ Editor: 'Z' given at the end of a file followed by two 'd'
corrupted the internal text storage, which sometimes
caused crashes.
- Language:
+ catch(; nolog) is now an official feature.
+ New modifier catch(; publish).
+ Constrained the switch() grammar so that only blocks are
suitable as bodies.
+ Operator '&' can intersect mappings with other mappings and arrays.
+ Macro __MAX_MALLOC__ is defined to the internal upper limit for
total memory usage.
+ Macro __MSDOS_FS__ is defined on systems using the MS-DOS
filesystem conventions.
+ Preprocessor symbol __FILENAME_SPACES__ is defined if the driver is
instructed to allow spaces in filenames.
+ A cast of a value to its own type, or a cast not resulting in a
conversion operation generates a warning. The pragma
no_warn_empty_casts can turn this warning off.
+ The strong_types/strict_types pragmas now persist beyond the
end of an include file (as does every other pragma).
+ call_other()s on arrays of objects is now configurable; if enabled,
the macro __LPC_ARRAY_CALLS__ is defined.
+ Bugfix: Characters with the 8th bit set are now treated as positive
when entered as literal character constants.
+ Bugfix: Illegal case ranges like '100..50' now generate
an error message.
- Runtime:
+ Mapping are now compacted (apart from a GC) only, if a certain
amount of time has elapsed since the last addition/removal
of a key, and if either more than half of the condensed entries
have been deleted, or if the number of hashed entries exceeds
the number of (non-deleted) condensed entries.
+ A heart-beat error now longer aborts the heartbeat cycle.
+ The operators -=, *= and /= can now operate on <int> x <float>,
yielding a <float> result.
+ <mapping> &= <mapping>, <mapping> &= <vector> implemented.
+ Allowed longer program names in backtraces.
+ If the H_RESET/H_CREATE_* hooks are defined by name, static
functions are found as well.
+ Bugfix: Subtracting arrays of closures from each other now actually
identifies identical closures.
+ Bugfix: The smalloc allocator now re-uses free 'large' memory for
small block chunks instead of always allocating them from the
system.
- Other Changes:
+ Editor: Consecutive 'z' or 'Z' commands no longer repeat
the previous current line.
+ Editor: Faulty commands 'quit'/'Quit' are caught before
the text buffer is cleared.
+ Configuration option '--enable-malloc-sbrk-trace' to enable
a log of all system memory requests including the stats of
the memory allocation request causing it. The intention is
to help debugging muds with high system memory usage.
+ Configuration option '--with-optimize' to set the optimization
level in the generated Makefiles.
+ New commandline option '--filename-spaces'/'--no-filename-spaces'
to allow or disallow space characters in filenames (default is to
disallow them).
02-Feb-2003 (Lars Duening) -- Release 3.2.9
- Changed efuns:
+ add_action(): New flag AA_IMM_ARGS implements the sane NOSPACE
handling.
+ allocate(): Accepts an optional initialisation value and can
create multi-dimensional arrays.
+ ceil(), floor(): Also accept integer argument values.
+ clones(): If the driver is compiled with DYNAMIC_COSTS, the cost
is proportional to the number of objects in the game.
+ ctime(): Accepts the output of new efun utime() as well.
+ debug_info(): New argument DINFO_TRACE to return the current
or the last error call stack.
Argument (DINFO_DATA, DID_MEMORY) also returns the number
and size of permanent and clib allocations, the amount of
memory allocated and available, and the amount of memory
unused (where applicable).
Argument (DINFO_DATA, DID_STATUS) also returns the number
of destructed objects and the total number of heartbeat calls.
Single values of (DINFO_DATA) can be returned instead of the
whole array.
Argument (DINFO_DUMP, "destructed") creates a dump
of all destructed objects, by default in <mudlib>/DEST_OBJ_DUMP.
+ debug_message(): New second argument determines where to
log the message, and if to prepend a timestamp.
+ deep_copy(): If DYNAMIC_COST is active, the evaluation cost
depends on size and nesting depth of copied arrays, structs
and mappings.
+ exec(): If this_interactive() points to one of the involved
objects, it is switched over as well, like this_player().
+ filter(), map(), sort_array(), walk_mapping(): Protected lvalues
(e.g. &(i[0])) are not allowed as callback parameters.
+ garbage_collection(): An optional filename argument specifies
the filename for the next and only the next GC.
+ get_dir(): New flag GETDIR_PATH to return the full pathnames.
+ get_type_info(): now returns the bound object for efun,
simul-efun and operator closures as well.
+ inherit_list(): the inherited objects can be returned in a
tree reflecting the inheritance structure. Virtual inherits
can be returned tagged as such.
+ input_to(): New option INPUT_PROMPT to specify a prompt for this
input_to.
+ lambda(): Simul efuns with extended varargs weren't compiled
correctly.
+ load_name(), object_name(), program_name(): 0 is now accepted
as argument, the efuns returns 0 in that case.
+ object_info(): OINFO_MEMORY also returns the program flags
NO_INHERIT, NO_SHADOW and NO_CLONE, and gives a better account
of the memory used for strings and variables.
Single values can be returned instead of the whole array.
+ printf(), sprintf(): A leading zero in the field size will now print
only leading zeros and not interfere with the pad string option.
+ printf(), sprintf(): If an explicite pad string is defined, even
if it is space, the efuns won't remove white space before a line
end.
+ printf(), sprintf(): Printing numbers with leading zeroes and a
sign character printed the sign in the wrong place.
+ printf(), sprintf(): When printing closures with %O, the program name
for inherited lfun closures is printed as well.
+ printf(), sprintf(): New format specifier 'Q' act like 'O', but quotes
special characters in strings.
+ printf(), sprintf(): New format modifier '$' implements flush
formatting for strings and columns of strings.
+ printf(), sprintf(): In justified column formatting, when a word is
too long to fit on a line by itself and there are at least two
characters space left on the current line, the long word is begun
immediately. Previously, such long words were always printed on a
line of their own.
+ query_udp_port(), send_udp(): Renamed from query_imp_port() and
send_imp().
+ query_verb(): Added an optional flag argument to return the
verb as given in the add_action() statement.
+ regexp functions: more compatible with 8-bit characters.
+ regexp functions: New metacharacters '+' allows to specifiy 'at
least one match'.
+ regreplace(): Accepts a closure to produce the replacement string
instead of just a constant string.
+ regreplace(): Pattern which could match on the
empty string matched once too often at string end.
+ replace_program(): Argument can be omitted if only one inherit
exists.
+ replace_program(): If the object alread has closures bound, the
efun will issue a debug_message() and fail, instead of raising