File: anagram.c Original provenience: unknown Source: unknown 2017-04-18: - Annotated anagram_main as entry-point for timing analysis 2016-06-22: - Fixed type signature of function anagram_main to conform to TACLeBench standard, i.e. `void anagram_main (void)`. 2016-05-24: - Changed type of global variables anagram_achPhrase and anagram_dictionary to `char const *[]`. - Changed parameter type of function anagram_BuildMask to `char const *`. 2016-04-26: - Fixed array out-of-bounds access introduced by earlier change. 2016-04-20: - Fixed some compiler warnings. - Return value of anagram_return depends on the computation inside of anagram_main. 2016-03-22 - Added forward declarations for all functions. - Renamed function main to anagram_main. - Added function anagram_init that calls anagram_ReadDict, removed call to anagram_ReadDict from anagram_main. - Added function anagram_return that handles the return value. - Added new function main that first calls anagram_init, then anagram_main and finally returns the return value of anagram_return. - Added generic TACLeBench header to all files. - Introduced comments to split file in sections for type definitions, forward declarations, global variables, initialization-related and return-value-related functions, core benchmark functions, and main routine. - Renamed ch2i, DICTWORDS, Quad, MASK_BITS, MAX_QUADS, MAXCAND, MAXSOL, ALPHABET, Word, PWord, PPWord, apwCand, cpwCand, Letter, PLetter, alPhrase, cchPhraseLength, aqMainMask, aqMainSign, cchMinLength, auGlobalFrequency, achByFrequency, pchDictionary, Reset, ReadDict, BuildMask, NewWord, NextWord, BuildWord, AddWords, apwSol, cpwLast, OneStep, DumpWords, FindAnagram and SortCandidates to anagram_ch2i, anagram_DICTWORDS, anagram_Quad, anagram_MASK_BITS, anagram_MAX_QUADS, anagram_MAXCAND, anagram_MAXSOL, anagram_ALPHABET, anagram_Word, anagram_PWord, anagram_PPWord, anagram_apwCand, anagram_cpwCand, anagram_Letter, anagram_PLetter, anagram_alPhrase, anagram_cchPhraseLength, anagram_aqMainMask, anagram_aqMainSign, anagram_cchMinLength, anagram_auGlobalFrequency, anagram_achByFrequency, anagram_pchDictionary, anagram_Reset, anagram_ReadDict, anagram_BuildMask, anagram_NewWord, anagram_NextWord, anagram_BuildWord, anagram_AddWords, anagram_apwSol, anagram_cpwLast, anagram_OneStep, anagram_DumpWords, anagram_FindAnagram and anagram_SortCandidates. - Renamed swapi, pivot, qsorts, simulated_heap and freeHeapPos to anagram_swapi, anagram_pivot, anagram_qsorts, anagram_simulated_heap and anagram_freeHeapPos. - Renamed achPhrase and dictionary to anagram_achPhrase and anagram_dictionary. - Renamed CompareFrequency to anagram_CompareFrequency. - Increased simulated heap in anagram_stdlib.c to 18000 bytes to prevent segmentation fault. - Changed header guard _WCCMALLOC_H to ANAGRAM_STRINGS_H. - Renamed wccmalloc, wccbzero to anagram_malloc, anagram_bzero. - Moved declaration of anagram_malloc to header anagram_stdlib.h. - Introduced header guard ANAGRAM_CTYPE_H. - Renamed wccislower, wccisupper, wccisalpha, wcctolower to anagram_islower, anagram_isupper, anagram_isalpha, anagram_tolower. - Removed illegal keyword "inline". - Changed header guard _WCCSTDLIB_H to ANAGRAM_STDLIB_H. - Renamed wccqsort to anagram_qsort. - Fixed compiler warning "no previous extern declaration for non-static variable" for variables simulated_heap and freeHeapPos by declaring them static. - Renamed preprocessor define HEAP_SIZE to ANAGRAM_HEAP_SIZE. - Fixed compiler warning "no previous prototype for function" by moving includes to the top of the file. - Fixed compiler warnings "implicit conversion changes signedness" and "comparison of integers of different signs" by consistenly using the type unsigned long in qsort helper functions. - Moved function CompareFrequency to file anagram.c, added declaration for it in file anagram_compare.h and included it in anagram_stdlib.h. - Fixed compiler warning "no previous extern declaration for non-static variable" by adding forward declarations. - Fixed compiler warning "macro is not used" by removing unused macros MAXWORDS and i2ch. - Replaced macro ch2i by proper function. - Fixed compiler warning "array subscript is of type 'char' in function CompareFrequency. - Fixed compiler warning "unused variable" by removing variable i in function Reset. - Fixed compiler warning "no previous extern declaration for non-static variable" by making global variables in file anagram.c static. - Replaced macro lPhrase by its expansion. - Fixed compiler warnings "implicit conversion loses integer precision" and "implicit conversion changes signedness" by adding explicit casts or using the appropriate type for local variables. - Fixed compiler warning "array subscript is of type 'char'" by changing type of some local variables as well as of global variable achByFrequency to int. - Changed all //-style comments to /* */-style comments. - Moved contents of wccmalloc.c to anagram_stdlib.c. - Renamed input.c to anagram_input.c. - Renamed wccctype.h to anagram_ctype.h. - Renamed wccstdlib.c to anagram_stdlib.c. - Renamed wccstdlib.h to anagram_stdlib.h. - Renamed wccmalloc.h to anagram_strings.h. - Applied TACLeBench formatting rules via astyle --options=doc/example/astylerc.txt - Tested conformance to C99 via clang -fsyntax-only -Weverything -Wno-unknown-pragmas -Wno-padded -pedantic -std=c99 2017-06-27 - Remove static declarations. 2017-07-10: - Adjust alignment calculation in anagram_malloc to not add padding on already aligned addresses. This prevents a buffer overflow of anagram_simulated_heap.