| File: | src/games/hack/hack.apply.c |
| Warning: | line 275, column 4 Value stored to 'bchx' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* $OpenBSD: hack.apply.c,v 1.8 2016/01/09 21:54:11 mestre Exp $ */ |
| 2 | |
| 3 | /* |
| 4 | * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica, |
| 5 | * Amsterdam |
| 6 | * All rights reserved. |
| 7 | * |
| 8 | * Redistribution and use in source and binary forms, with or without |
| 9 | * modification, are permitted provided that the following conditions are |
| 10 | * met: |
| 11 | * |
| 12 | * - Redistributions of source code must retain the above copyright notice, |
| 13 | * this list of conditions and the following disclaimer. |
| 14 | * |
| 15 | * - Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in the |
| 17 | * documentation and/or other materials provided with the distribution. |
| 18 | * |
| 19 | * - Neither the name of the Stichting Centrum voor Wiskunde en |
| 20 | * Informatica, nor the names of its contributors may be used to endorse or |
| 21 | * promote products derived from this software without specific prior |
| 22 | * written permission. |
| 23 | * |
| 24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
| 25 | * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
| 26 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
| 27 | * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER |
| 28 | * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| 29 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| 30 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| 31 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| 32 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| 33 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| 34 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 35 | */ |
| 36 | |
| 37 | /* |
| 38 | * Copyright (c) 1982 Jay Fenlason <hack@gnu.org> |
| 39 | * All rights reserved. |
| 40 | * |
| 41 | * Redistribution and use in source and binary forms, with or without |
| 42 | * modification, are permitted provided that the following conditions |
| 43 | * are met: |
| 44 | * 1. Redistributions of source code must retain the above copyright |
| 45 | * notice, this list of conditions and the following disclaimer. |
| 46 | * 2. Redistributions in binary form must reproduce the above copyright |
| 47 | * notice, this list of conditions and the following disclaimer in the |
| 48 | * documentation and/or other materials provided with the distribution. |
| 49 | * 3. The name of the author may not be used to endorse or promote products |
| 50 | * derived from this software without specific prior written permission. |
| 51 | * |
| 52 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, |
| 53 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY |
| 54 | * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL |
| 55 | * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| 56 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| 57 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
| 58 | * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| 59 | * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
| 60 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
| 61 | * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 62 | */ |
| 63 | |
| 64 | #include "def.edog.h" |
| 65 | #include "hack.h" |
| 66 | |
| 67 | extern int (*occupation)(void); |
| 68 | extern char *occtxt; |
| 69 | extern char quitchars[]; |
| 70 | extern char pl_character[]; |
| 71 | |
| 72 | static void use_camera(struct obj *); |
| 73 | static void use_ice_box(struct obj *); |
| 74 | int in_ice_box(struct obj *); |
| 75 | int ck_ice_box(struct obj *); |
| 76 | int out_ice_box(struct obj *); |
| 77 | static struct monst *bchit(int, int, int, char); |
| 78 | static void use_whistle(struct obj *); |
| 79 | static void use_magic_whistle(struct obj *); |
| 80 | static int dig(void); |
| 81 | static int use_pick_axe(struct obj *); |
| 82 | |
| 83 | int |
| 84 | doapply(void) |
| 85 | { |
| 86 | struct obj *obj; |
| 87 | int res = 1; |
| 88 | |
| 89 | obj = getobj("(", "use or apply"); |
| 90 | if(!obj) return(0); |
| 91 | |
| 92 | switch(obj->otyp){ |
| 93 | case EXPENSIVE_CAMERA91: |
| 94 | use_camera(obj); break; |
| 95 | case ICE_BOX92: |
| 96 | use_ice_box(obj); break; |
| 97 | case PICK_AXE93: |
| 98 | res = use_pick_axe(obj); |
| 99 | break; |
| 100 | |
| 101 | case MAGIC_WHISTLE90: |
| 102 | if(pl_character[0] == 'W' || u.ulevel > 9) { |
| 103 | use_magic_whistle(obj); |
| 104 | break; |
| 105 | } |
| 106 | /* fall into next case */ |
| 107 | case WHISTLE89: |
| 108 | use_whistle(obj); |
| 109 | break; |
| 110 | |
| 111 | case CAN_OPENER94: |
| 112 | if(!carrying(TIN8)) { |
| 113 | pline("You have no can to open."); |
| 114 | goto xit; |
| 115 | } |
| 116 | pline("You cannot open a tin without eating its contents."); |
| 117 | pline("In order to eat, use the 'e' command."); |
| 118 | if(obj != uwep) |
| 119 | pline("Opening the tin will be much easier if you wield the can-opener."); |
| 120 | goto xit; |
| 121 | |
| 122 | default: |
| 123 | pline("Sorry, I don't know how to use that."); |
| 124 | xit: |
| 125 | nomul(0); |
| 126 | return(0); |
| 127 | } |
| 128 | nomul(0); |
| 129 | return(res); |
| 130 | } |
| 131 | |
| 132 | static void |
| 133 | use_camera(struct obj *obj) |
| 134 | { |
| 135 | struct monst *mtmp; |
| 136 | |
| 137 | if (!getdir(1)){ /* ask: in what direction? */ |
| 138 | flags.move = multi = 0; |
| 139 | return; |
| 140 | } |
| 141 | if (u.uswallow) { |
| 142 | pline("You take a picture of %s's stomach.", monnam(u.ustuck)); |
| 143 | return; |
| 144 | } |
| 145 | if (u.dz) { |
| 146 | pline("You take a picture of the %s.", |
| 147 | (u.dz > 0) ? "floor" : "ceiling"); |
| 148 | return; |
| 149 | } |
| 150 | if ((mtmp = bchit(u.dx, u.dy, COLNO80, '!'))) { |
| 151 | if(mtmp->msleep){ |
| 152 | mtmp->msleep = 0; |
| 153 | pline("The flash awakens %s.", monnam(mtmp)); /* a3 */ |
| 154 | } else |
| 155 | if(mtmp->data->mlet != 'y') |
| 156 | if(mtmp->mcansee || mtmp->mblinded){ |
| 157 | int tmp = dist(mtmp->mx,mtmp->my); |
| 158 | int tmp2; |
| 159 | if(cansee(mtmp->mx,mtmp->my)) |
| 160 | pline("%s is blinded by the flash!", Monnam(mtmp)); |
| 161 | setmangry(mtmp); |
| 162 | if(tmp < 9 && !mtmp->isshk && rn2(4)) { |
| 163 | mtmp->mflee = 1; |
| 164 | if(rn2(4)) mtmp->mfleetim = rnd(100); |
| 165 | } |
| 166 | if(tmp < 3) mtmp->mcansee = mtmp->mblinded = 0; |
| 167 | else { |
| 168 | tmp2 = mtmp->mblinded; |
| 169 | tmp2 += rnd(1 + 50/tmp); |
| 170 | if(tmp2 > 127) tmp2 = 127; |
| 171 | mtmp->mblinded = tmp2; |
| 172 | mtmp->mcansee = 0; |
| 173 | } |
| 174 | } |
| 175 | } |
| 176 | } |
| 177 | |
| 178 | static |
| 179 | struct obj *current_ice_box; /* a local variable of use_ice_box, to be |
| 180 | used by its local procedures in/ck_ice_box */ |
| 181 | int |
| 182 | in_ice_box(struct obj *obj) |
| 183 | { |
| 184 | if(obj == current_ice_box || |
| 185 | (Punishedu.uprops[(19 +5)].p_flgs && (obj == uball || obj == uchain))){ |
| 186 | pline("You must be kidding."); |
| 187 | return(0); |
| 188 | } |
| 189 | if(obj->owornmask & (W_ARMOR(01L | 02L | 04L | 010L | 020L) | W_RING(010000L | 020000L))) { |
| 190 | pline("You cannot refrigerate something you are wearing."); |
| 191 | return(0); |
| 192 | } |
| 193 | if(obj->owt + current_ice_box->owt > 70) { |
| 194 | pline("It won't fit."); |
| 195 | return(1); /* be careful! */ |
| 196 | } |
| 197 | if(obj == uwep) { |
| 198 | if(uwep->cursed) { |
| 199 | pline("Your weapon is welded to your hand!"); |
| 200 | return(0); |
| 201 | } |
| 202 | setuwep((struct obj *) 0); |
| 203 | } |
| 204 | current_ice_box->owt += obj->owt; |
| 205 | freeinv(obj); |
| 206 | obj->o_cnt_id = current_ice_box->o_id; |
| 207 | obj->nobj = fcobj; |
| 208 | fcobj = obj; |
| 209 | obj->age = moves - obj->age; /* actual age */ |
| 210 | return(1); |
| 211 | } |
| 212 | |
| 213 | int |
| 214 | ck_ice_box(struct obj *obj) |
| 215 | { |
| 216 | return(obj->o_cnt_id == current_ice_box->o_id); |
| 217 | } |
| 218 | |
| 219 | int |
| 220 | out_ice_box(struct obj *obj) |
| 221 | { |
| 222 | struct obj *otmp; |
| 223 | |
| 224 | if (obj == fcobj) |
| 225 | fcobj = fcobj->nobj; |
| 226 | else { |
| 227 | for(otmp = fcobj; otmp->nobj != obj; otmp = otmp->nobj) |
| 228 | if(!otmp->nobj) panic("out_ice_box"); |
| 229 | otmp->nobj = obj->nobj; |
| 230 | } |
| 231 | current_ice_box->owt -= obj->owt; |
| 232 | obj->age = moves - obj->age; /* simulated point of time */ |
| 233 | (void) addinv(obj); |
| 234 | return(0); |
| 235 | } |
| 236 | |
| 237 | static void |
| 238 | use_ice_box(struct obj *obj) |
| 239 | { |
| 240 | int cnt = 0; |
| 241 | struct obj *otmp; |
| 242 | current_ice_box = obj; /* for use by in/out_ice_box */ |
| 243 | for(otmp = fcobj; otmp; otmp = otmp->nobj) |
| 244 | if(otmp->o_cnt_id == obj->o_id) |
| 245 | cnt++; |
| 246 | if(!cnt) pline("Your ice-box is empty."); |
| 247 | else { |
| 248 | pline("Do you want to take something out of the ice-box? [yn] "); |
| 249 | if(readchar() == 'y') |
| 250 | if(askchain(fcobj, NULL((void *)0), 0, out_ice_box, ck_ice_box, 0)) |
| 251 | return; |
| 252 | pline("That was all. Do you wish to put something in? [yn] "); |
| 253 | if(readchar() != 'y') return; |
| 254 | } |
| 255 | /* call getobj: 0: allow cnt; #: allow all types; %: expect food */ |
| 256 | otmp = getobj("0#%", "put in"); |
| 257 | if(!otmp || !in_ice_box(otmp)) |
| 258 | flags.move = multi = 0; |
| 259 | } |
| 260 | |
| 261 | static |
| 262 | struct monst * |
| 263 | bchit(int ddx, int ddy, int range, char sym) |
| 264 | { |
| 265 | struct monst *mtmp = (struct monst *) 0; |
| 266 | int bchx = u.ux, bchy = u.uy; |
| 267 | |
| 268 | if(sym) Tmp_at(-1, sym); /* open call */ |
| 269 | while(range--) { |
| 270 | bchx += ddx; |
| 271 | bchy += ddy; |
| 272 | if ((mtmp = m_at(bchx,bchy))) |
| 273 | break; |
| 274 | if(!ZAP_POS(levl[bchx][bchy].typ)((levl[bchx][bchy].typ) > 7)) { |
| 275 | bchx -= ddx; |
Value stored to 'bchx' is never read | |
| 276 | bchy -= ddy; |
| 277 | break; |
| 278 | } |
| 279 | if(sym) |
| 280 | Tmp_at(bchx, bchy); |
| 281 | } |
| 282 | if(sym) |
| 283 | Tmp_at(-1, -1); |
| 284 | return(mtmp); |
| 285 | } |
| 286 | |
| 287 | static void |
| 288 | use_whistle(struct obj *obj) |
| 289 | { |
| 290 | struct monst *mtmp = fmon; |
| 291 | pline("You produce a high whistling sound."); |
| 292 | while(mtmp) { |
| 293 | if(dist(mtmp->mx,mtmp->my) < u.ulevel*20) { |
| 294 | if(mtmp->msleep) |
| 295 | mtmp->msleep = 0; |
| 296 | if(mtmp->mtame) |
| 297 | EDOG(mtmp)((struct edog *)(&(mtmp->mextra[0])))->whistletime = moves; |
| 298 | } |
| 299 | mtmp = mtmp->nmon; |
| 300 | } |
| 301 | } |
| 302 | |
| 303 | static void |
| 304 | use_magic_whistle(struct obj *obj) |
| 305 | { |
| 306 | struct monst *mtmp = fmon; |
| 307 | pline("You produce a strange whistling sound."); |
| 308 | while(mtmp) { |
| 309 | if(mtmp->mtame) mnexto(mtmp); |
| 310 | mtmp = mtmp->nmon; |
| 311 | } |
| 312 | } |
| 313 | |
| 314 | static int dig_effort; /* effort expended on current pos */ |
| 315 | static uchar dig_level; |
| 316 | static coord dig_pos; |
| 317 | static boolean dig_down; |
| 318 | |
| 319 | static int |
| 320 | dig(void) |
| 321 | { |
| 322 | struct rm *lev; |
| 323 | int dpx = dig_pos.x, dpy = dig_pos.y; |
| 324 | |
| 325 | /* perhaps a nymph stole his pick-axe while he was busy digging */ |
| 326 | /* or perhaps he teleported away */ |
| 327 | if(u.uswallow || !uwep || uwep->otyp != PICK_AXE93 || |
| 328 | dig_level != dlevel || |
| 329 | ((dig_down && (dpx != u.ux || dpy != u.uy)) || |
| 330 | (!dig_down && dist(dpx,dpy) > 2))) |
| 331 | return(0); |
| 332 | |
| 333 | dig_effort += 10 + abon() + uwep->spe + rn2(5); |
| 334 | if(dig_down) { |
| 335 | if(!xdnstair) { |
| 336 | pline("The floor here seems too hard to dig in."); |
| 337 | return(0); |
| 338 | } |
| 339 | if(dig_effort > 250) { |
| 340 | dighole(); |
| 341 | return(0); /* done with digging */ |
| 342 | } |
| 343 | if(dig_effort > 50) { |
| 344 | struct trap *ttmp = t_at(dpx,dpy); |
| 345 | |
| 346 | if(!ttmp) { |
| 347 | ttmp = maketrap(dpx,dpy,PIT5); |
| 348 | ttmp->tseen = 1; |
| 349 | pline("You have dug a pit."); |
| 350 | u.utrap = rn1(4,2); |
| 351 | u.utraptype = TT_PIT1; |
| 352 | return(0); |
| 353 | } |
| 354 | } |
| 355 | } else |
| 356 | if (dig_effort > 100) { |
| 357 | char *digtxt; |
| 358 | struct obj *obj; |
| 359 | |
| 360 | lev = &levl[dpx][dpy]; |
| 361 | if ((obj = sobj_at(ENORMOUS_ROCK97, dpx, dpy))) { |
| 362 | fracture_rock(obj); |
| 363 | digtxt = "The rock falls apart."; |
| 364 | } else if(!lev->typ || lev->typ == SCORR4) { |
| 365 | lev->typ = CORR8; |
| 366 | digtxt = "You succeeded in cutting away some rock."; |
| 367 | } else if(lev->typ == HWALL1 || lev->typ == VWALL2 |
| 368 | || lev->typ == SDOOR3) { |
| 369 | lev->typ = xdnstair ? DOOR7 : ROOM9; |
| 370 | digtxt = "You just made an opening in the wall."; |
| 371 | } else |
| 372 | digtxt = "Now what exactly was it that you were digging in?"; |
| 373 | mnewsym(dpx, dpy); |
| 374 | prl(dpx, dpy); |
| 375 | pline("%s", digtxt); /* after mnewsym & prl */ |
| 376 | return(0); |
| 377 | } else { |
| 378 | if(IS_WALL(levl[dpx][dpy].typ)((levl[dpx][dpy].typ) <= 2)) { |
| 379 | int rno = inroom(dpx,dpy); |
| 380 | |
| 381 | if(rno >= 0 && rooms[rno].rtype >= 8) { |
| 382 | pline("This wall seems too hard to dig into."); |
| 383 | return(0); |
| 384 | } |
| 385 | } |
| 386 | pline("You hit the rock with all your might."); |
| 387 | } |
| 388 | return(1); |
| 389 | } |
| 390 | |
| 391 | /* When will hole be finished? Very rough indication used by shopkeeper. */ |
| 392 | int |
| 393 | holetime(void) |
| 394 | { |
| 395 | return( (occupation == dig) ? (250 - dig_effort)/20 : -1); |
| 396 | } |
| 397 | |
| 398 | void |
| 399 | dighole(void) |
| 400 | { |
| 401 | struct trap *ttmp = t_at(u.ux, u.uy); |
| 402 | |
| 403 | if(!xdnstair) { |
| 404 | pline("The floor here seems too hard to dig in."); |
| 405 | } else { |
| 406 | if(ttmp) |
| 407 | ttmp->ttyp = TRAPDOOR3; |
| 408 | else |
| 409 | ttmp = maketrap(u.ux, u.uy, TRAPDOOR3); |
| 410 | ttmp->tseen = 1; |
| 411 | pline("You've made a hole in the floor."); |
| 412 | if(!u.ustuck) { |
| 413 | if(inshop()) |
| 414 | shopdig(1); |
| 415 | pline("You fall through ..."); |
| 416 | if(u.utraptype == TT_PIT1) { |
| 417 | u.utrap = 0; |
| 418 | u.utraptype = 0; |
| 419 | } |
| 420 | goto_level(dlevel+1, FALSE0); |
| 421 | } |
| 422 | } |
| 423 | } |
| 424 | |
| 425 | static int |
| 426 | use_pick_axe(struct obj *obj) |
| 427 | { |
| 428 | char dirsyms[12]; |
| 429 | extern char sdir[]; |
| 430 | char *dsp = dirsyms, *sdp = sdir; |
| 431 | struct monst *mtmp; |
| 432 | struct rm *lev; |
| 433 | int rx, ry, res = 0; |
| 434 | |
| 435 | if(obj != uwep) { |
| 436 | if(uwep && uwep->cursed) { |
| 437 | /* Andreas Bormann - ihnp4!decvax!mcvax!unido!ab */ |
| 438 | pline("Since your weapon is welded to your hand,"); |
| 439 | pline("you cannot use that pick-axe."); |
| 440 | return(0); |
| 441 | } |
| 442 | pline("You now wield %s.", doname(obj)); |
| 443 | setuwep(obj); |
| 444 | res = 1; |
| 445 | } |
| 446 | while(*sdp) { |
| 447 | (void) movecmd(*sdp); /* sets u.dx and u.dy and u.dz */ |
| 448 | rx = u.ux + u.dx; |
| 449 | ry = u.uy + u.dy; |
| 450 | if(u.dz > 0 || (u.dz == 0 && isok(rx, ry) && |
| 451 | (IS_ROCK(levl[rx][ry].typ)((levl[rx][ry].typ) < 6) |
| 452 | || sobj_at(ENORMOUS_ROCK97, rx, ry)))) |
| 453 | *dsp++ = *sdp; |
| 454 | sdp++; |
| 455 | } |
| 456 | *dsp = 0; |
| 457 | pline("In what direction do you want to dig? [%s] ", dirsyms); |
| 458 | if(!getdir(0)) /* no txt */ |
| 459 | return(res); |
| 460 | if(u.uswallow && attack(u.ustuck)) /* return(1) */; |
| 461 | else |
| 462 | if(u.dz < 0) |
| 463 | pline("You cannot reach the ceiling."); |
| 464 | else |
| 465 | if(u.dz == 0) { |
| 466 | if(Confusionu.uprops[(19 +2)].p_flgs) |
| 467 | confdir(); |
| 468 | rx = u.ux + u.dx; |
| 469 | ry = u.uy + u.dy; |
| 470 | if((mtmp = m_at(rx, ry)) && attack(mtmp)) |
| 471 | return(1); |
| 472 | if(!isok(rx, ry)) { |
| 473 | pline("Clash!"); |
| 474 | return(1); |
| 475 | } |
| 476 | lev = &levl[rx][ry]; |
| 477 | if(lev->typ == DOOR7) |
| 478 | pline("Your %s against the door.", |
| 479 | aobjnam(obj, "clang")); |
| 480 | else if(!IS_ROCK(lev->typ)((lev->typ) < 6) |
| 481 | && !sobj_at(ENORMOUS_ROCK97, rx, ry)) { |
| 482 | /* ACCESSIBLE or POOL */ |
| 483 | pline("You swing your %s through thin air.", |
| 484 | aobjnam(obj, NULL((void *)0))); |
| 485 | } else { |
| 486 | if(dig_pos.x != rx || dig_pos.y != ry |
| 487 | || dig_level != dlevel || dig_down) { |
| 488 | dig_down = FALSE0; |
| 489 | dig_pos.x = rx; |
| 490 | dig_pos.y = ry; |
| 491 | dig_level = dlevel; |
| 492 | dig_effort = 0; |
| 493 | pline("You start digging."); |
| 494 | } else |
| 495 | pline("You continue digging."); |
| 496 | occupation = dig; |
| 497 | occtxt = "digging"; |
| 498 | } |
| 499 | } else if(Levitationu.uprops[6].p_flgs) { |
| 500 | pline("You cannot reach the floor."); |
| 501 | } else { |
| 502 | if(dig_pos.x != u.ux || dig_pos.y != u.uy |
| 503 | || dig_level != dlevel || !dig_down) { |
| 504 | dig_down = TRUE1; |
| 505 | dig_pos.x = u.ux; |
| 506 | dig_pos.y = u.uy; |
| 507 | dig_level = dlevel; |
| 508 | dig_effort = 0; |
| 509 | pline("You start digging in the floor."); |
| 510 | if(inshop()) |
| 511 | shopdig(0); |
| 512 | } else |
| 513 | pline("You continue digging in the floor."); |
| 514 | occupation = dig; |
| 515 | occtxt = "digging"; |
| 516 | } |
| 517 | return(1); |
| 518 | } |