About: Source:NetHack 1.4f/options.c   Sponge Permalink

An Entity of Type : owl:Thing, within Data Space : 134.155.108.49:8890 associated with source dataset(s)

Below is the full text to options.c from the source code of NetHack 1.4f. To link to a particular line, write [[NetHack 1.4f/options.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code

AttributesValues
rdfs:label
  • Source:NetHack 1.4f/options.c
rdfs:comment
  • Below is the full text to options.c from the source code of NetHack 1.4f. To link to a particular line, write [[NetHack 1.4f/options.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code
dcterms:subject
dbkwik:nethack/pro...iPageUsesTemplate
abstract
  • Below is the full text to options.c from the source code of NetHack 1.4f. To link to a particular line, write [[NetHack 1.4f/options.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code 1. /* SCCS Id: @(#)options.c 1.4 87/08/08 2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3. /* options.c - version 1.0.3 */ 4. 5. #include "config.h" 6. #include "hack.h" 7. extern char *eos(); 8. #ifdef SORTING 9. static boolean set_order; 10. #endif 11. 12. initoptions() 13. { 14. register char *opts; 15. extern char *getenv(); 16. 17. flags.time = flags.nonews = flags.notombstone = flags.end_own = 18. flags.standout = flags.nonull = FALSE; 19. flags.no_rest_on_space = TRUE; 20. flags.invlet_constant = TRUE; 21. flags.end_top = 5; 22. flags.end_around = 4; 23. flags.female = FALSE; /* players are usually male */ 24. #ifdef SORTING 25. flags.sortpack = TRUE; 26. #endif 27. #ifdef SAFE_ATTACK 28. flags.confirm = TRUE; 29. #endif 30. #ifdef DGKMOD 31. flags.silent = flags.pickup = TRUE; 32. #endif 33. #ifdef DGK 34. flags.IBMBIOS = flags.DECRainbow = flags.rawio = FALSE; 35. read_config_file(); 36. #endif 37. #ifdef HACKOPTIONS 38. if(opts = getenv("HACKOPTIONS")) 39. parseoptions(opts,TRUE); 40. #endif 41. } 42. 43. parseoptions(opts, from_env) 44. register char *opts; 45. boolean from_env; 46. { 47. register char *op,*op2; 48. unsigned num; 49. boolean negated; 50. 51. if(op = index(opts, ',')) { 52. *op++ = 0; 53. parseoptions(op, from_env); 54. } 55. if(op = index(opts, ' ')) { 56. op2 = op; 57. while(*op++) 58. if(*op != ' ') *op2++ = *op; 59. } 60. if(!*opts) return; 61. negated = FALSE; 62. while((*opts == '!') || !strncmp(opts, "no", 2)) { 63. if(*opts == '!') opts++; else opts += 2; 64. negated = !negated; 65. } 66. 67. #ifndef DGK 68. if(!strncmp(opts,"standout",4)) { 69. flags.standout = !negated; 70. return; 71. } 72. 73. if(!strncmp(opts,"null",4)) { 74. flags.nonull = negated; 75. return; 76. } 77. 78. if(!strncmp(opts,"tombstone",4)) { 79. flags.notombstone = negated; 80. return; 81. } 82. 83. if(!strncmp(opts,"news",4)) { 84. flags.nonews = negated; 85. return; 86. } 87. #endif 88. 89. #ifdef SAFE_ATTACK 90. if (!strncmp(opts, "conf", 4)) { 91. flags.confirm = !negated; 92. return; 93. } 94. 95. #endif 96. #ifdef DGKMOD 97. if (!strncmp(opts, "sile", 4)) { 98. flags.silent = !negated; 99. return; 100. } 101. 102. if (!strncmp(opts, "pick", 4)) { 103. flags.pickup = !negated; 104. return; 105. } 106. #endif 107. #ifdef DGK 108. if (!strncmp(opts, "IBMB", 4)) { 109. flags.IBMBIOS = !negated; 110. return; 111. } 112. 113. if (!strncmp(opts, "rawi", 4)) { 114. if (from_env) 115. flags.rawio = !negated; 116. else 117. pline("'rawio' only settable from %s.", configfile); 118. return; 119. } 120. 121. if (!strncmp(opts, "DECR", 4)) { 122. flags.DECRainbow = !negated; 123. return; 124. } 125. #endif 126. 127. #ifdef SORTING 128. if (!strncmp(opts, "sort", 4)) { 129. flags.sortpack = !negated; 130. return; 131. } 132. 133. /* 134. * the order to list the pack 135. */ 136. if (!strncmp(opts,"packorder",4)) { 137. register char *sp, *tmp; 138. extern char inv_order[]; 139. int tmpend; 140. 141. op = index(opts,':'); 142. if(!op) goto bad; 143. op++; /* skip : */ 144. 145. /* Missing characters in new order are filled in at the end 146. * from inv_order. 147. */ 148. for (sp = op; *sp; sp++) 149. if (!index(inv_order, *sp)) 150. goto bad; /* bad char in order */ 151. else if (index(sp + 1, *sp)) 152. goto bad; /* dup char in order */ 153. tmp = (char *) alloc(strlen(inv_order) + 1); 154. (void) strcpy(tmp, op); 155. for (sp = inv_order, tmpend = strlen(tmp); *sp; sp++) 156. if (!index(tmp, *sp)) { 157. tmp[tmpend++] = *sp; 158. tmp[tmpend] = 0; 159. } 160. (void) strcpy(inv_order, tmp); 161. free(tmp); 162. set_order = TRUE; 163. return; 164. } 165. #endif 166. 167. if(!strncmp(opts,"time",4)) { 168. flags.time = !negated; 169. flags.botl = 1; 170. return; 171. } 172. 173. if(!strncmp(opts,"restonspace",4)) { 174. flags.no_rest_on_space = negated; 175. return; 176. } 177. 178. #ifndef DGK 179. if(!strncmp(opts,"fixinv",4)) { 180. if(from_env) 181. flags.invlet_constant = !negated; 182. else 183. pline("The fixinvlet option must be in HACKOPTIONS."); 184. return; 185. } 186. #endif 187. 188. if(!strncmp(opts,"male",4)) { 189. #ifdef KAA 190. if(!from_env && flags.female != negated) 191. pline("That is not anatomically possible."); 192. else 193. #endif 194. flags.female = negated; 195. return; 196. } 197. if(!strncmp(opts,"female",6)) { 198. #ifdef KAA 199. if(!from_env && flags.female == negated) 200. pline("That is not anatomically possible."); 201. else 202. #endif 203. flags.female = !negated; 204. return; 205. } 206. 207. /* name:string */ 208. if(!strncmp(opts,"name",4)) { 209. extern char plname[PL_NSIZ]; 210. if(!from_env) { 211. #ifdef DGK 212. pline("'name' only settable from %s.", configfile); 213. #else 214. pline("The playername can be set only from HACKOPTIONS."); 215. #endif 216. return; 217. } 218. op = index(opts,':'); 219. if(!op) goto bad; 220. nmcpy(plname, op+1, sizeof(plname)-1); 221. return; 222. } 223. 224. #ifdef GRAPHICS 225. /* graphics:string */ 226. if(!strncmp(opts,"graphics",4)) { 227. char buf[MAXPCHARS]; 228. if(!from_env) { 229. #ifdef DGK 230. pline("'graphics' only settable from %s.", configfile); 231. #else 232. pline("The graphics string can be set only from HACKOPTIONS."); 233. #endif 234. return; 235. } 236. op = index(opts,':'); 237. if(!op) 238. goto bad; 239. else 240. opts++; 241. /* 242. * You could have problems here if you configure FOUNTAINS, SPIDERS or NEWCLASS 243. * in or out and forget to change the tail entries in your graphics string. 244. */ 245. #define SETPCHAR(f, n) showsyms.f = (strlen(opts) > n) ? opts[n] : defsyms.f 246. SETPCHAR(stone, 0); 247. SETPCHAR(vwall, 1); 248. SETPCHAR(hwall, 2); 249. SETPCHAR(tlcorn, 3); 250. SETPCHAR(trcorn, 4); 251. SETPCHAR(blcorn, 5); 252. SETPCHAR(brcorn, 6); 253. SETPCHAR(door, 7); 254. SETPCHAR(room, 8); 255. SETPCHAR(corr, 9); 256. SETPCHAR(upstair, 10); 257. SETPCHAR(dnstair, 11); 258. SETPCHAR(trap, 12); 259. #ifdef FOUNTAINS 260. SETPCHAR(pool, 13); 261. SETPCHAR(fountain, 14); 262. #endif 263. #ifdef NEWCLASS 264. SETPCHAR(throne, 15); 265. #endif 266. #ifdef SPIDERS 267. SETPCHAR(web, 16); 268. #endif 269. #undef SETPCHAR 270. return; 271. } 272. #endif /* GRAPHICS */ 273. 274. /* endgame:5t[op] 5a[round] o[wn] */ 275. if(!strncmp(opts,"endgame",3)) { 276. op = index(opts,':'); 277. if(!op) goto bad; 278. op++; 279. while(*op) { 280. num = 1; 281. if(digit(*op)) { 282. num = atoi(op); 283. while(digit(*op)) op++; 284. } else 285. if(*op == '!') { 286. negated = !negated; 287. op++; 288. } 289. switch(*op) { 290. case 't': 291. flags.end_top = num; 292. break; 293. case 'a': 294. flags.end_around = num; 295. break; 296. case 'o': 297. flags.end_own = !negated; 298. break; 299. default: 300. goto bad; 301. } 302. while(letter(*++op)) ; 303. if(*op == '/') op++; 304. } 305. return; 306. } 307. #ifdef DOGNAME 308. if(!strncmp(opts, "dogname", 3)) { 309. extern char dogname[]; 310. op = index(opts, ':'); 311. if (!op) goto bad; 312. nmcpy(dogname, ++op, 62); 313. return; 314. } 315. #endif /* DOGNAME */ 316. bad: 317. if(!from_env) { 318. if(!strncmp(opts, "help", 4)) { 319. pline("%s%s%s", 320. #ifdef DGK 321. 322. "To set options use OPTIONS= in ", configfile, 323. " or give the command \"O\" followed by the line while playing. ", 324. "Here is a list of options separated by commas." ); 325. pline("%s%s", 326. "Boolean options are confirm, pickup, rawio, silent, sortpack, time, IBMBIOS,", 327. " and DECRainbow. These can be negated by prefixing them with '!' or \"no\"." ); 328. pline("%s%s%s%s", 329. "The compound options are name, as in OPTIONS=name:Merlin-W,", 330. #ifdef DOGNAME 331. " dogname, which gives the name of your (first) dog (e.g. dogname:Rover)", 332. #endif /* DOGNAME */ 333. #ifdef SORTING 334. " packorder, which lists the order that items should appear in your pack", 335. #ifdef SPELLS 336. " (the default is: packorder:\")[%?+/=!(*0 ), and endgame." ); 337. #else 338. " (the default is: packorder:\")[%?/=!(*0 ), and endgame." ); 339. #endif /* SPELLS /**/ 340. #else 341. #ifdef GRAPHICS 342. "engame, and graphics.", "", ""); 343. #else 344. "and engame.", "", ""); 345. #endif 346. #endif /* SORTING /**/ 347. pline("%s%s%s", 348. "Endgame is followed by a description of which parts of the scorelist ", 349. "you wish to see. You might for example say: ", 350. "\"endgame:own scores/5 top scores/4 around my score\"." ); 351. 352. #else 353. 354. "To set options use `HACKOPTIONS=\"\"' in your environment, or ", 355. "give the command 'O' followed by the line `' while playing. ", 356. "Here is a list of s separated by commas." ); 357. pline("%s%s%s", 358. "Simple (boolean) options are rest_on_space, news, time, ", 359. "null, tombstone, (fe)male. ", 360. "These can be negated by prefixing them with '!' or \"no\"." ); 361. pline("%s%s%s%s", 362. "The compound options are name, as in OPTIONS=name:Merlin-W,", 363. #ifdef DOGNAME 364. " dogname, which gives the name of your (first) dog (e.g. dogname:Rover)", 365. #endif /* DOGNAME */ 366. #ifdef SORTING 367. " packorder, which lists the order that items should appear in your pack", 368. #ifdef SPELLS 369. " (the default is: packorder:\")[%?+/=!(*0 ), and endgame." ); 370. #else 371. " (the default is: packorder:\")[%?/=!(*0 ), and endgame." ); 372. #endif /* SPELLS /**/ 373. #else 374. "and engame.", "", ""); 375. #endif /* SORTING /**/ 376. pline("%s%s%s", 377. "Endgame is followed by a description of what parts of the scorelist", 378. "you want to see. You might for example say: ", 379. "`endgame:own scores/5 top scores/4 around my score'." ); 380. 381. #endif /* DGK /**/ 382. return; 383. } 384. pline("Bad option: %s.", opts); 385. pline("Type `o help' for help."); 386. return; 387. } 388. #ifdef DGK 389. printf("Bad syntax in OPTIONS in %s.", configfile); 390. #else 391. puts("Bad syntax in HACKOPTIONS."); 392. puts("Use for example:"); 393. puts( 394. "HACKOPTIONS=\"!restonspace,notombstone,endgame:own/5 topscorers/4 around me\"" 395. ); 396. #endif 397. getret(); 398. } 399. 400. doset() 401. { 402. char buf[BUFSZ]; 403. #ifdef SORTING 404. extern char inv_order[]; 405. #endif 406. 407. pline("What options do you want to set? "); 408. getlin(buf); 409. if(!buf[0] || buf[0] == '\033') { 410. #ifdef DGK 411. (void) strcpy(buf,"OPTIONS="); 412. #else 413. (void) strcpy(buf,"HACKOPTIONS="); 414. (void) strcat(buf, flags.female ? "female," : "male,"); 415. if(flags.standout) (void) strcat(buf,"standout,"); 416. if(flags.nonull) (void) strcat(buf,"nonull,"); 417. if(flags.nonews) (void) strcat(buf,"nonews,"); 418. if(flags.notombstone) (void) strcat(buf,"notombstone,"); 419. if(flags.no_rest_on_space) (void) strcat(buf,"!rest_on_space,"); 420. #endif 421. #ifdef SORTING 422. if (flags.sortpack) (void) strcat(buf,"sortpack,"); 423. if (set_order){ 424. (void) strcat(buf, "packorder: "); 425. (void) strcat(buf, inv_order); 426. (void) strcat(buf, ","); 427. } 428. #endif 429. #ifdef SAFE_ATTACK 430. if (flags.confirm) (void) strcat(buf,"confirm,"); 431. #endif 432. #ifdef DGKMOD 433. if (flags.pickup) (void) strcat(buf,"pickup,"); 434. if (flags.silent) (void) strcat(buf,"silent,"); 435. #endif 436. #ifdef DGK 437. if (flags.rawio) (void) strcat(buf,"rawio,"); 438. if (flags.IBMBIOS) (void) strcat(buf,"IBMBIOS,"); 439. if (flags.DECRainbow) (void) strcat(buf,"DECRainbow,"); 440. #endif 441. if(flags.time) (void) strcat(buf,"time,"); 442. if(flags.end_top != 5 || flags.end_around != 4 || flags.end_own){ 443. (void) sprintf(eos(buf), "endgame: %u topscores/%u around me", 444. flags.end_top, flags.end_around); 445. if(flags.end_own) (void) strcat(buf, "/own scores"); 446. } else { 447. register char *eop = eos(buf); 448. if(*--eop == ',') *eop = 0; 449. } 450. pline(buf); 451. } else 452. parseoptions(buf, FALSE); 453. 454. return(0); 455. } 456. 457. #ifdef DGKMOD 458. dotogglepickup() { 459. flags.pickup = !flags.pickup; 460. pline("Pickup: %s.", flags.pickup ? "ON" : "OFF"); 461. return (0); 462. } 463. #endif 464. 465. nmcpy(dest, source, maxlen) 466. char *dest, *source; 467. int maxlen; 468. { 469. char *cs, *cd; 470. int count; 471. 472. cd = dest; 473. cs = source; 474. for(count = 1; count < maxlen; count++) { 475. if(*cs == ',') break; 476. *cd++ = *cs++; 477. } 478. *cd = 0; 479. }
Alternative Linked Data Views: ODE     Raw Data in: CXML | CSV | RDF ( N-Triples N3/Turtle JSON XML ) | OData ( Atom JSON ) | Microdata ( JSON HTML) | JSON-LD    About   
This material is Open Knowledge   W3C Semantic Web Technology [RDF Data] Valid XHTML + RDFa
OpenLink Virtuoso version 07.20.3217, on Linux (x86_64-pc-linux-gnu), Standard Edition
Data on this page belongs to its respective rights holders.
Virtuoso Faceted Browser Copyright © 2009-2012 OpenLink Software