ESHK
ESHK->shoproom = roomno;
ESHK->shoplevel = dlevel;
ESHK->shd = doors[sh];
ESHK->shk.x = sx;
ESHK->shk.y = sy;
ESHK->robbed = 0;
ESHK->visitct = 0;
ESHK->following = 0;
ESHK->billct = 0;
findname(ESHK->shknam, let);
uondoor = (u.ux == ESHK(shkp)->shd.x &&
u.uy == ESHK(shkp)->shd.y);
if (ESHK(shkp)->billct)
if (((!ESHK(shkp)->robbed && !ESHK(shkp)->billct) || avoid)
|| shkroom != ESHK(shkp)->shoproom
|| ESHK(shkp)->following) {
|| (mtmp->isshk && ESHK(mtmp)->following)
return (ESHK(mtmp)->shknam);
struct eshk *eshk = ESHK(mtmp);
bill = &(ESHK(shopkeeper)->bill[0]);
ESHK(shopkeeper)->billct = 0;
int ct = ESHK(shopkeeper)->billct;
if (ESHK(shopkeeper)->billct) {
ESHK(shopkeeper)->robbed += total;
if ((rooms[ESHK(shopkeeper)->shoproom].rtype == GENERAL)
ESHK(shopkeeper)->following = 1;
|| ESHK(shopkeeper)->shoproom != roomno)
if (!ESHK(shopkeeper)->visitct ||
strncmp(ESHK(shopkeeper)->customer, plname, PL_NSIZ)) {
ESHK(shopkeeper)->visitct = 0;
ESHK(shopkeeper)->following = 0;
(void) strncpy(ESHK(shopkeeper)->customer, plname, PL_NSIZ);
if (!ESHK(shopkeeper)->following) {
ESHK(shopkeeper)->visitct++ ? " again" : "",
shopnam[rooms[ESHK(shopkeeper)->shoproom].rtype - 8]);
if (mtmp->isshk && ESHK(mtmp)->shoproom == roomno
&& ESHK(mtmp)->shoplevel == dlevel) {
bill = &(ESHK(shopkeeper)->bill[0]);
strncmp(ESHK(shopkeeper)->customer, plname, PL_NSIZ))
for (bp = bill; bp < &bill[ESHK(shopkeeper)->billct]; bp++)
ESHK(shopkeeper)->billct--;
*bp = bill[ESHK(shopkeeper)->billct];
long robbed = ESHK(shkp)->robbed;
ESHK(shkp)->robbed = robbed;
inroom(shopkeeper->mx, shopkeeper->my) == ESHK(shopkeeper)->shoproom)
ltmp = ESHK(shkp)->robbed;
ESHK(shkp)->robbed = 0;
ESHK(shkp)->following = 0;
if (ESHK(shkp)->shoplevel != dlevel) {
if (!ESHK(shkp)->billct) {
if (ESHK(shkp)->robbed) {
(u.ugold < ESHK(shkp)->robbed) ? "partially " : "",
pay(min(u.ugold, ESHK(shkp)->robbed), shkp);
ESHK(shkp)->robbed = 0;
if (strncmp(ESHK(shkp)->customer, plname, PL_NSIZ)
while (tmp < ESHK(shopkeeper)->billct) {
bill[tmp] = bill[--ESHK(shopkeeper)->billct];
shopnam[rooms[ESHK(shopkeeper)->shoproom].rtype - 8]);
if (shlevel == dlevel && shopkeeper && ESHK(shopkeeper)->billct) {
(u.ux == ESHK(shopkeeper)->shk.x && u.uy == ESHK(shopkeeper)->shk.y) ||
(u.ux == ESHK(shopkeeper)->shd.x && u.uy == ESHK(shopkeeper)->shd.y) ||
if (ESHK(shopkeeper)->billct == BILLSZ) {
bp = &bill[ESHK(shopkeeper)->billct];
ESHK(shopkeeper)->billct++;
if (ESHK(shopkeeper)->billct == BILLSZ)
bp = &bill[ESHK(shopkeeper)->billct];
ESHK(shopkeeper)->billct++;
if (!inshop() || (u.ux == ESHK(shopkeeper)->shk.x && u.uy == ESHK(shopkeeper)->shk.y) ||
(u.ux == ESHK(shopkeeper)->shd.x && u.uy == ESHK(shopkeeper)->shd.y))
ESHK(shopkeeper)->billct--;
*bp = bill[ESHK(shopkeeper)->billct];
inroom(shopkeeper->mx, shopkeeper->my) != ESHK(shopkeeper)->shoproom)
if (ESHK(shopkeeper)->billct == BILLSZ ||
((tmp = shtypes[rooms[ESHK(shopkeeper)->shoproom].rtype - 8]) && tmp != obj->olet)
if (ESHK(shopkeeper)->robbed) {
if ((ESHK(shopkeeper)->robbed -= ltmp) < 0)
ESHK(shopkeeper)->robbed = 0;
for (bp = bill; bp - bill < ESHK(shopkeeper)->billct; bp++)
for (bp = bill; bp - bill < ESHK(shopkeeper)->billct; bp++) {
shkp->mx == ESHK(shkp)->shk.x && shkp->my == ESHK(shkp)->shk.y &&
u.ux == ESHK(shkp)->shd.x && u.uy == ESHK(shkp)->shd.y) {
if (ESHK(shkp)->following) {
if (strncmp(ESHK(shkp)->customer, plname, PL_NSIZ)) {
plname, ESHK(shkp)->customer);
ESHK(shkp)->following = 0;
if (!ESHK(shkp)->robbed) { /* impossible? */
ESHK(shkp)->following = 0;
gx = ESHK(shkp)->shk.x;
gy = ESHK(shkp)->shk.y;
if (ESHK(shkp)->following || ((z = holetime()) >= 0 && z * z <= udist)) {