/*~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- ~ Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, ~ ~ Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. ~ ~ ~ ~ Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael ~ ~ Chastain, Michael Quan, and Mitchell Tse. ~ ~ ~ ~ Ack 2.2 improvements copyright (C) 1994 by Stephen Dooley ~ ~ ACK!MUD is modified Merc2.0/2.1/2.2 code (c)Stephen Zepp 1998 Ver: 4.3 ~ ~ ~ ~ In order to use any part of this PA Diku Mud, you must comply with ~ ~ both the original Diku license in 'license.doc' as well the Merc ~ ~ license in 'license.txt', and the Ack!Mud license in 'ack_license.txt'.~ ~ In particular, you may not remove any of these copyright notices. ~ ~ ~ ~ _______ _____ ~ ~ / __ /\ / ___ \ 222222 PA_MUD by Amnon Kruvi ~ ~ /______/ / / /___\ \ 2 PA_MUD is modified ~ ~ / _______/ / _______ \ 2 Ack!Mud, v4.3 ~ ~ /_/ /_/ \_\ 2 ~ ~ 2 ~ ~ 2222222 ~ ~ ~ ~ ~ ~ Years of work have been invested to create DIKU, Merc, Ack and PA. ~ ~ Please show your respect by following the licenses, and issuing ~ ~ credits where due. ~ ~ ~ ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-*/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "ack.h" /* The tables in here are: Object item type : tab_item_types : number Object extra flags : tab_obj_flags : bit_vector Object wear flags : tab_wear_flags : bit_vector Wear locations : tab_wear_loc : number */ const struct lookup_type tab_value_meanings[]= { { "Unused", 15, 0 }, { "Unused", 16, 0 }, { "Hours of light, -1 = infinite", 17, 5 }, { "Unused", 18, 0 }, { "Unused", 19, 0 }, { "Rarity", 20, 0 }, { "Replacer vnum", 21, 0 }, { "Forced extract timer", 22, 0 }, { "Unused", 23, 0 }, { "Unused", 24, 0 }, { "Unused", 25, 0 }, { "Unused", 26, 0 }, { "Unused", 27, 0 }, { "Unused", 28, 0 }, { "Unused", 29, 0 }, { "AmmoType", 30, 0 }, { "Amount", 31, 0 }, { "Unused", 32, 0 }, { "Unused", 33, 0 }, { "Unused", 34, 0 }, { "Unused", 35, 0 }, { "Replacer vnum", 36, 0 }, { "Forced extract timer", 37, 0 }, { "Unused", 38, 0 }, { "Unused", 39, 0 }, { "Unused", 40, 0 }, { "Unused", 41, 0 }, { "Unused", 42, 0 }, { "Unused", 43, 0 }, { "Unused", 44, 0 }, { "Timer", 45, 0 }, { "Armed", 46, 0 }, { "Damage Dice", 47, 0 }, { "Special", 48, 0 }, { "Grenade?", 49, 0 }, { "AttachDir", 50, 0 }, { "Dud Chance", 51, 0 }, { "Research Progress", 52, 0 }, { "Silent", 53, 0 }, { "Unused", 54, 0 }, { "Unused", 55, 0 }, { "Unused", 56, 0 }, { "Unused", 57, 0 }, { "Unused", 58, 0 }, { "Unused", 59, 0 }, { "Unused", 60, 0 }, { "Unused", 61, 0 }, { "Unused", 62, 0 }, { "Unused", 63, 0 }, { "Unused", 64, 0 }, { "Unused", 65, 0 }, { "Replacer vnum", 66, 0 }, { "Forced extract timer", 67, 0 }, { "Unused", 68, 0 }, { "Unused", 69, 0 }, { "Unused", 70, 0 }, { "Unused", 71, 0 }, { "Unused", 72, 0 }, { "Unused", 73, 0 }, { "Unused", 74, 0 }, { "Ammo", 75, 0 }, { "Max Ammo", 76, 0 }, { "AmmoType", 77, 0 }, { "Affects", 78, 0 }, { "Range", 79, 0 }, { "ArmoryType", 80, 0 }, { "Scope", 81, 0 }, { "+Dam", 82, 0 }, { "+BuildDam", 83, 0 }, { "+Speed", 84, 0 }, { "+Accuracy", 85, 0 }, { "Poison", 86, 0 }, { "Recharge Timer", 87, 0 }, { "Unused", 88, 0 }, { "Unused", 89, 0 }, { "Suit", 90, 0 }, { "Quality", 91, 0 }, { "Unused", 92, 0 }, { "Unused", 93, 0 }, { "Unused", 94, 0 }, { "Unused", 95, 0 }, { "Replacer vnum", 96, 0 }, { "Forced extract timer", 97, 0 }, { "Unused", 98, 0 }, { "Unused", 99, 0 }, { "Unused", 100, 0 }, { "Unused", 101, 0 }, { "Unused", 102, 0 }, { "Unused", 103, 0 }, { "Unused", 104, 0 }, { "Quality", 105, 0 }, { "Special", 106, 0 }, { "Unused", 107, 0 }, { "Unused", 108, 0 }, { "Unused", 109, 0 }, { "Unused", 110, 0 }, { "Replacer vnum", 111, 0 }, { "Forced extract timer", 112, 0 }, { "Unused", 113, 0 }, { "Unused", 114, 0 }, { "Type", 120, 50 }, { "Quality", 121, -25 }, { "Unused", 122, -25 }, { "Unused", 123, -25 }, { "Unused", 124, 0 }, { "Unused", 125, 0 }, { "Replacer vnum", 126, 0 }, { "Forced extract timer", 127, 0 }, { "Unused", 128, 0 }, { "Unused", 129, 0 }, { "Unused", 130, 0 }, { "Unused", 131, 0 }, { "Unused", 132, 0 }, { "Unused", 133, 0 }, { "Unused", 134, 0 }, { "Main Type", 135, 10 }, { "Damage", 136, 0 }, { "vs. General", 137, 0 }, { "vs. Bullets", 138, 0 }, { "vs. Blast", 139, 0 }, { "vs. Acid", 140, 0 }, { "vs. Fire", 141, 0 }, { "vs. Laser", 142, 0 }, { "vs. Sound", 143, 0 }, { "Unused", 144, 0 }, { "Unused", 145, 0 }, { "Unused", 146, 0 }, { "Unused", 147, 0 }, { "Unused", 148, 0 }, { "ArmorerType", 149, 0 }, { "Range", 150, 0 }, { "Building Type", 151, 0 }, { "Unused", 152, 0 }, { "Unused", 153, 0 }, { "Unused", 154, 0 }, { "Unused", 155, 0 }, { "Replacer vnum", 156, 0 }, { "Forced extract timer", 157, 0 }, { "Unused", 158, 0 }, { "Unused", 159, 0 }, { "Unused", 160, 0 }, { "Unused", 161, 0 }, { "Unused", 162, 0 }, { "Unused", 163, 0 }, { "Unused", 164, 0 }, { "InstType", 165, 10 }, { "Building 1", 166, 0 }, { "Building 2", 167, 0 }, { "Building 3", 168, 0 }, { "Building 4", 169, 0 }, { "Unused", 170, 0 }, { "Replacer vnum", 171, 0 }, { "Forced extract timer", 172, 0 }, { "Unused", 173, 0 }, { "Unused", 174, 0 }, { "Unused", 175, 0 }, { "Unused", 176, 0 }, { "Unused", 177, 0 }, { "Unused", 178, 0 }, { "Unused", 179, 0 }, { "Type", 180, 10 }, { "Duration", 181, 0 }, { "Unused", 182, 0 }, { "Unused", 183, 0 }, { "Unused", 184, 0 }, { "Unused", 185, 0 }, { "Replacer vnum", 186, 0 }, { "Forced extract timer", 187, 0 }, { "Unused", 188, 0 }, { "Unused", 189, 0 }, { "Unused", 190, 0 }, { "Unused", 191, 0 }, { "Unused", 192, 0 }, { "Unused", 193, 0 }, { "Unused", 194, 0 }, { "Type", 225, 10 }, { "State", 226, 0 }, { "Unused", 227, 0 }, { "Unused", 228, 0 }, { "Unused", 229, 0 }, { "Unused", 230, 0 }, { "Replacer vnum", 231, 0 }, { "Forced extract timer", 232, 0 }, { "Unused", 233, 0 }, { "Unused", 234, 0 }, { "Unused", 235, 0 }, { "Unused", 236, 0 }, { "Unused", 237, 0 }, { "Unused", 238, 0 }, { "Unused", 239, 0 }, { "Solids", 240, 10 }, { "Liquids", 241, 0 }, { "Gasses", 242, 0 }, { "Unused", 243, 0 }, { "Unused", 244, 0 }, { "Unused", 245, 0 }, { "Replacer vnum", 246, 0 }, { "Forced extract timer", 247, 0 }, { "Unused", 248, 0 }, { "Unused", 249, 0 }, { "Unused", 250, 0 }, { "Unused", 251, 0 }, { "Unused", 252, 0 }, { "Unused", 253, 0 }, { "Unused", 254, 0 }, { "Type", 255, 10 }, { "Quality", 256, 0 }, { "Unused", 257, 0 }, { "Unused", 258, 0 }, { "Unused", 259, 0 }, { "Unused", 260, 0 }, { "Replacer vnum", 261, 0 }, { "Forced extract timer", 262, 0 }, { "Unused", 263, 0 }, { "Unused", 264, 0 }, { "Unused", 265, 0 }, { "Unused", 266, 0 }, { "Unused", 267, 0 }, { "Unused", 268, 0 }, { "Unused", 269, 0 }, { "Connect", 270, 10 }, { "Result", 271, 0 }, { "Connect", 272, 0 }, { "Result", 273, 0 }, { "Unused", 274, 0 }, { "Unused", 275, 0 }, { "Unused", 276, 0 }, { "Unused", 277, 0 }, { "Unused", 278, 0 }, { "Unused", 279, 0 }, { "Unused", 280, 0 }, { "Unused", 281, 0 }, { "Unused", 282, 0 }, { "Unused", 283, 0 }, { "Unused", 284, 0 }, { "Quality", 285, 10 }, { "Battery", 286, 0 }, { "Antenna", 287, 0 }, { "Backdoor", 288, 0 }, { "Speed", 289, 0 }, { "VirusVersion", 290, 0 }, { "CrackerVersion", 291, 0 }, { "Modem", 292, 0 }, { "BatteryType", 293, 0 }, { "Unused", 294, 0 }, { "Unused", 295, 0 }, { "Unused", 296, 0 }, { "Unused", 297, 0 }, { "Unused", 298, 0 }, { "Unused", 299, 0 }, { "Range", 300, 10 }, { "Battery", 301, 0 }, { "Unused", 302, 0 }, { "Unused", 303, 0 }, { "Unused", 304, 0 }, { "Unused", 305, 0 }, { "Replacer vnum", 306, 0 }, { "Forced extract timer", 307, 0 }, { "Unused", 308, 0 }, { "Unused", 309, 0 }, { "Unused", 310, 0 }, { "Unused", 311, 0 }, { "Unused", 312, 0 }, { "Unused", 313, 0 }, { "Unused", 314, 0 }, { "Skill", 315, 10 }, { "Amount", 316, 0 }, { "Unused", 317, 0 }, { "Unused", 318, 0 }, { "Unused", 319, 0 }, { "Unused", 320, 0 }, { "Replacer vnum", 321, 0 }, { "Forced extract timer", 322, 0 }, { "Unused", 323, 0 }, { "Unused", 324, 0 }, { "Unused", 325, 0 }, { "Unused", 326, 0 }, { "Unused", 327, 0 }, { "Unused", 328, 0 }, { "Unused", 329, 0 }, { "Type", 330, 0 }, { "+HP", 331, 0 }, { "+Speed", 332, 0 }, { "+Fuel", 333, 0 }, { "+Ammo", 334, 0 }, { "AmmoType", 335, 0 }, { "Flags", 336, 0 }, { "Unused", 337, 0 }, { "Unused", 338, 0 }, { "Unused", 339, 0 }, { "Unused", 340, 0 }, { "Unused", 341, 0 }, { "Unused", 342, 0 }, { "Unused", 343, 0 }, { "Unused", 344, 0 }, { "Type", 345, 0 }, { "Version", 346, 0 }, { "Unused", 347, 0 }, { "Unused", 348, 0 }, { "Unused", 349, 0 }, { "Unused", 350, 0 }, { "Unused", 351, 0 }, { "Unused", 352, 0 }, { "Unused", 353, 0 }, { "Unused", 354, 0 }, { "Unused", 355, 0 }, { "Unused", 356, 0 }, { "Unused", 357, 0 }, { "Unused", 358, 0 }, { "Unused", 359, 0 }, { "Unused", 360, 0 }, { "Unused", 361, 0 }, { "Unused", 362, 0 }, { "Unused", 363, 0 }, { "Unused", 364, 0 }, { "Unused", 365, 0 }, { "Unused", 366, 0 }, { "Unused", 367, 0 }, { "Unused", 368, 0 }, { "Unused", 369, 0 }, { "Unused", 370, 0 }, { "Unused", 371, 0 }, { "Unused", 372, 0 }, { "Unused", 373, 0 }, { "Unused", 374, 0 }, { "Type", 375, 0 }, { "Amount", 376, 0 }, { "Unused", 377, 0 }, { "Unused", 378, 0 }, { "Unused", 379, 0 }, { "Unused", 380, 0 }, { "Unused", 381, 0 }, { "Unused", 382, 0 }, { "Unused", 383, 0 }, { "Unused", 384, 0 }, { "Unused", 385, 0 }, { "Unused", 386, 0 }, { "Unused", 387, 0 }, { "Unused", 388, 0 }, { "Unused", 389, 0 }, { "V0", 390, 0 }, { "V1", 391, 0 }, { "V2", 392, 0 }, { "V3", 393, 0 }, { "V4", 394, 0 }, { "V5", 395, 0 }, { "V6", 396, 0 }, { "V7", 397, 0 }, { "V8", 398, 0 }, { "V9", 399, 0 }, { "Unused", 400, 0 }, { "Unused", 401, 0 }, { "Unused", 402, 0 }, { "Unused", 403, 0 }, { "Unused", 404, 0 }, { "No. of days message will last.", 405, 10 }, { "Minimum level to write board (read?).", 406, 0 }, { "Minimum level to look board (write?).", 407, 0 }, { "BOARD vnum... set to object's vnum.", 408, 0 }, { "Alliance", 409, 0 }, { "Building", 410, 0 }, { "Unused", 411, 0 }, { "Unused", 412, 0 }, { "Unused", 413, 0 }, { "Unused", 414, 0 }, { "Unused", 415, 0 }, { "Unused", 416, 0 }, { "Unused", 417, 0 }, { "Unused", 418, 0 }, { "Unused", 419, 0 }, { "Type", 420, 0 }, { "Quality", 421, 0 }, { "Vehicle", 422, 0 }, { "Vehicle", 423, 0 }, { "Vehicle", 424, 0 }, { "Vehicle", 425, 0 }, { "Vehicle", 426, 0 }, { "Vehicle", 427, 0 }, { "Vehicle", 428, 0 }, { "Bit Value", 429, 0 }, { "Unused", 430, 0 }, { "Unused", 431, 0 }, { "Unused", 432, 0 }, { "Unused", 433, 0 }, { "Unused", 434, 0 }, { "GWire", 435, 0 }, { "BWire", 436, 0 }, { "RWire", 437, 0 }, { "YWire", 438, 0 }, { "GWire2", 439, 0 }, { "BWire2", 440, 0 }, { "RWire2", 441, 0 }, { "YWire2", 442, 0 }, { "Unused", 443, 0 }, { "Unused", 444, 0 }, { "Unused", 445, 0 }, { "Unused", 446, 0 }, { "Unused", 447, 0 }, { "Unused", 448, 0 }, { "Unused", 449, 0 }, { "Building", 450, 0 }, { "Limit", 451, 0 }, { "Unused", 452, 0 }, { "Unused", 453, 0 }, { "Unused", 454, 0 }, { "Unused", 455, 0 }, { "Unused", 456, 0 }, { "Unused", 457, 0 }, { "Unused", 458, 0 }, { "Unused", 459, 0 }, { "Unused", 460, 0 }, { "Unused", 461, 0 }, { "Unused", 462, 0 }, { "Unused", 463, 0 }, { "Unused", 464, 0 }, { "Research Time", 465, 0 }, { "Item #1", 466, 0 }, { "Item #2", 467, 0 }, { "Item #3", 468, 0 }, { "Item #4", 469, 0 }, { "Item #5", 470, 0 }, { "Item #6", 471, 0 }, { "Unused", 472, 0 }, { "Unused", 473, 0 }, { "Unused", 474, 0 }, { "Unused", 475, 0 }, { "Unused", 476, 0 }, { "Unused", 477, 0 }, { "Unused", 478, 0 }, { "Unused", 479, 0 }, { "Type", 480, 0 }, { "Range", 481, 0 }, { "Coord_x", 482, 0 }, { "Coord_y", 483, 0 }, { "Unused", 484, 0 }, { "Unused", 485, 0 }, { "Unused", 486, 0 }, { "Unused", 487, 0 }, { "Unused", 488, 0 }, { "Unused", 489, 0 }, { "Unused", 490, 0 }, { "Unused", 491, 0 }, { "Unused", 492, 0 }, { "Unused", 493, 0 }, { "Unused", 494, 0 }, { "Quality", 495, 0 }, { "Charge", 496, 0 }, { "Unused", 497, 0 }, { "Unused", 498, 0 }, { "Unused", 499, 0 }, { "Unused", 500, 0 }, { "Unused", 501, 0 }, { "Unused", 502, 0 }, { "Unused", 503, 0 }, { "Unused", 504, 0 }, { "Unused", 505, 0 }, { "Unused", 506, 0 }, { "Unused", 507, 0 }, { "Unused", 508, 0 }, { "Unused", 509, 0 }, { "Type", 510, 0 }, //Sattelites { "Build Time (min)", 511, 0 }, { "Life (Hours)", 512, 0 }, { "Unused", 513, 0 }, { "Unused", 514, 0 }, { "Unused", 515, 0 }, { "Unused", 516, 0 }, { "Unused", 517, 0 }, { "Unused", 518, 0 }, { "Unused", 519, 0 }, { "Unused", 520, 0 }, { "Unused", 521, 0 }, { "Unused", 522, 0 }, { "Unused", 523, 0 }, { "Unused", 524, 0 }, { NULL, 0 } }; const struct lookup_type tab_item_types[] = { /* { "nada", 0, 0 }, */ /* { "placeholder", 0, 0 }, */ { "light", 1, 20}, { "ammo", 2, 1000}, { "bomb", 3, 2000}, { "blueprints", 4, 5000}, { "weapon", 5, 500}, { "suit", 6, 5000}, { "medpack", 7, 0}, { "drone", 8, 0}, { "armor", 9, 500}, { "teleporter", 10, 1000}, { "installation", 11, 0}, { "potion", 12, 20}, { "flag", 13, 0}, { "dartboard", 14, 0}, { "element", 15, 0}, { "container", 16, 0}, { "winstall", 17, 0}, { "piece", 18, 0}, { "computer", 19, 0}, { "item locator", 20, 0}, { "skill upgrade", 21, 0}, { "part", 22, 0}, { "disk", 23, 0}, { "portal", 24, 0}, { "asteroid", 25, 0}, { "backup disk", 26, 0}, { "board", 27, 0}, { "vehicle addon", 28, 0}, { "toolkit", 29, 0}, { "scaffold", 30, 0}, { "ore", 31, 0}, { "biotunnel", 32, 0}, { "battery", 33, 0}, { "satellite", 34, 0}, { "token", 35, NO_USE }, { "unused", 36, 0}, { "unused", 37, 0}, { "unused", 38, 0}, { "unused", 39, 0}, { "material", 40, 0 }, { NULL, 0} }; const struct lookup_type tab_obj_flags[] = { { "nada" , 0, 0 }, { "nuclear" , 1, 0 }, { "sticky" , 2, 0 }, { "noqp" , 4, 0 }, { "nodrop" , 128, 20}, { "noremove" , 4096, 100}, { "inventory" , 8192, 0}, { "nosave" , 16384, 1000}, { "nosac" , 8388608, 100 }, { "unique" , 16777216, 100 }, { NULL,0} }; const struct lookup_type tab_weapon_flags[] = { { "nada", 0, 0 }, { NULL,0} }; const struct lookup_type tab_wear_flags[] = { { "head", BIT_1, 40 }, { "face", BIT_2, 50 }, { "shoulders", BIT_3, 40 }, { "arms", BIT_4, 100 }, { "hands", BIT_5, 50 }, { "hold", BIT_6, 100 }, { "waist", BIT_7, 20 }, { "body", BIT_8, 100 }, { "legs", BIT_9, 100 }, { "feet", BIT_10, 900 }, { "take", BIT_24, 900 }, { "eyes", BIT_12, 900 }, { NULL, 0 } }; /* This not used at present. Thought i'd bung details in though :) */ /* Yeah it is, you lied! - Wyn */ const struct lookup_type tab_item_apply[] = { { "nada", 1, 0 }, { NULL, 0 } }; const struct lookup_type tab_wear_loc[] = { { "nada", 0, 0}, { "head", 4, 20}, { "face", 5, 20}, { "ear_l", 7, 40}, { "ear_r", 8, 40}, { "neck_1", 9, 40}, { "neck_2", 10, 40}, { "shoulders", 12, 20}, { "arms", 13, 20}, { "wrist_l", 14, 50}, { "wrist_r", 15, 20}, { "hands", 16, 20}, { "finger_l", 17, 30}, { "finger_r", 18, 30}, { "hold_l", 20, 100}, { "hold_r", 21, 40}, { "cape", 22, 20}, { "waist", 23, 20}, { "body", 24, 40}, { "legs", 26, 20}, { "feet", 27, 40}, { "eyes", 29, 20}, { "max_wear", 36, 0}, { NULL, 0} }; const struct lookup_type tab_player_flags[] = { { "nada", 0, 0}, { "AFK", 2, 0}, { "ECHAN", BIT_26, 0}, { NULL,0} }; /* Now for the functions */ unsigned long int table_lookup(const struct lookup_type * table,char * name) { int a; if (name[0]=='\0') return /* table[0].value-1 */0; for (a=0; table[a].text != NULL; a++) if (!str_prefix(name,table[a].text)) return ( ( !str_cmp(table[a].text, "nada" ) ) ? 0 : table[a].value ); return /* table[0].value-1 */0; } unsigned long int multi_table_lookup(const struct lookup_type * table,char * name) { int a; long_int retval; char curname[MSL]; if (name[0]=='\0') return 0; retval = 0; name=one_argument(name,curname); for ( ; ; ) { if ( curname[0] == '\0') break; for (a=0; table[a].text != NULL; a++) { if (!str_prefix(curname,table[a].text) || !str_cmp(curname,table[a].text)) retval ^= ( ( !str_cmp(table[a].text, "nada" ) ) ? 0 : table[a].value ); } name=one_argument(name,curname); } return retval; } char * rev_table_lookup(const struct lookup_type * table, unsigned long int number) { int a; for (a=0; table[a].text != NULL; a++) if (table[a].value==number) return table[a].text; return ""; } /* spec: fixed to not assume contiguous bit use */ char * bit_table_lookup(const struct lookup_type * table, unsigned long int number) { int a; static char buf[MAX_STRING_LENGTH]; buf[0]='\0'; for ( a=0; number && table[a].text; a++ ) { if ( ( number & table[a].value)==table[a].value && str_cmp( table[a].text, "nada" ) && str_cmp( table[a].text, "placeholder" ) ) { safe_strcat( MSL, buf,table[a].text); // safe_strcat( MSL, buf,", "); safe_strcat( MSL, buf," "); number &= ~table[a].value; } } if (buf[0]=='\0') safe_strcat( MSL, buf, "none" ); else { a=strlen(buf); // buf[a-2]='.'; // buf[a-1]='\0'; // buf[a-2]='.'; buf[a-1]='\0'; } return buf; } void table_printout(const struct lookup_type * table,char * buf) { int a; a=0; buf[0]='\0'; for (a=0;table[a].text!=NULL;a++) { if ( ( strcmp(table[a].text,"nada") ) && ( strcmp(table[a].text,"placeholder") ) ) /* If not an invalid choice */ { safe_strcat( MSL, buf," "); safe_strcat( MSL, buf,table[a].text); safe_strcat( MSL, buf,"\n\r"); } } return; } void wide_table_printout(const struct lookup_type * table,char * buf) { /* Like table_printout, but formats into columns */ char tmp[MAX_STRING_LENGTH]; int a; int foo; /* work out how many values shown in a row */ a=0; foo = 0; buf[0]='\0'; for (a=0;table[a].text!=NULL;a++) { if ( ( strcmp(table[a].text,"nada") ) /* If not an invalid choice */ && ( strcmp(table[a].text,"nada") ) ) { safe_strcat( MSL, buf," "); sprintf( tmp, "%12s", table[a].text ); safe_strcat( MSL, buf,tmp ); if ( ++foo % 4 == 0 ) safe_strcat( MSL, buf,"\n\r"); } } safe_strcat( MSL, buf, "\n\r" ); return; } char * show_values(const struct lookup_type * table,int value, bool fBit) { char tmp[MAX_STRING_LENGTH]; static char buf[MAX_STRING_LENGTH]; int a; int foo; /* work out how many values shown in a row */ a=0; foo = 0; buf[0]='\0'; for (a=0;table[a].text!=NULL;a++) { if ( ( strcmp(table[a].text,"nada") ) /* If not an invalid choice */ && ( strcmp(table[a].text,"placeholder") ) ) { safe_strcat( MSL, buf," "); sprintf( tmp, "%s%-13s", fBit? (IS_SET( value, table[a].value ) ? "@@y*" : "@@g ") : (value == table[a].value ? "@@y*" : "@@g "), table[a].text ); safe_strcat( MSL, buf,tmp ); if ( ++foo % 4 == 0 ) safe_strcat( MSL, buf,"\n\r"); } } safe_strcat( MSL, buf, "@@g\n\r" ); return( buf ); }