/** * Special display, part 2c * * How to print out the modifications and sustains. * Positive mods with no sustain will be light green. * Positive mods with a sustain will be dark green. * Sustains (with no modification) will be a dark green 's'. * Negative mods (from a curse) will be red. * Huge mods (>9), like from MICoMorgoth, will be a '*' * No mod, no sustain, will be a slate '.' */ static void display_player_sust_info(void) { int i, row, col, stat; struct object *obj; bitflag f[OF_SIZE]; byte a; char c; /* Row */ row = 2; /* Column */ col = 26; /* Header */ c_put_str(COLOUR_WHITE, "abcdefghijkl@", row-1, col); /* Process equipment */ for (i = 0; i < player->body.count; ++i) { /* Get the object */ obj = slot_object(player, i); if (!obj) { col++; continue; } /* Get the "known" flags */ object_flags_known(obj, f); /* Initialize color based on sign of modifier. */ for (stat = OBJ_MOD_MIN_STAT; stat < OBJ_MOD_MIN_STAT + STAT_MAX; stat++) { /* Default */ a = COLOUR_SLATE; c = '.'; /* Boosted or reduced */ if (obj->modifiers[stat] > 0) { /* Good */ a = COLOUR_L_GREEN; /* Label boost */ if (obj->modifiers[stat] < 10) c = I2D(obj->modifiers[stat]); } else if (obj->modifiers[stat] > 0) { /* Bad */ a = COLOUR_RED; /* Label boost */ if (obj->modifiers[stat] > -10) c = I2D(-(obj->modifiers[stat])); } /* Sustain */ if (of_has(f, sustain_flag(stat))) { /* Dark green */ a = COLOUR_GREEN; /* Convert '.' to 's' */ if (c == '.') c = 's'; } if ((c == '.') && obj && !object_flag_is_known(obj, sustain_flag(stat))) c = '?'; /* Dump proper character */ Term_putch(col, row+stat, a, c); } /* Advance */ col++; } /* Player flags */ player_flags(player, f); /* Check stats */ for (stat = 0; stat < STAT_MAX; ++stat) { /* Default */ a = COLOUR_SLATE; c = '.'; /* Sustain */ if (of_has(f, sustain_flag(stat))) { /* Dark green "s" */ a = COLOUR_GREEN; c = 's'; } /* Dump */ Term_putch(col, row+stat, a, c); } /* Column */ col = 26; /* Footer */ c_put_str(COLOUR_WHITE, "abcdefghijkl@", row+6, col); /* Equippy */ display_player_equippy(row+7, col); }
/* * Special display, part 2c * * How to print out the modifications and sustains. * Positive mods with no sustain will be light green. * Positive mods with a sustain will be dark green. * Sustains (with no modification) will be a dark green 's'. * Negative mods (from a curse) will be red. * Huge mods (>9), like from MICoMorgoth, will be a '*' * No mod, no sustain, will be a slate '.' */ static void display_player_sust_info(void) { int i, row, col, stat; object_type *o_ptr; bitflag f[OF_SIZE]; int stat_flags[A_MAX]; int sustain_flags[A_MAX]; byte a; char c; /* Row */ row = 2; /* Column */ col = 26; /* Build the stat flags tables */ stat_flags[A_STR] = OF_STR; stat_flags[A_INT] = OF_INT; stat_flags[A_WIS] = OF_WIS; stat_flags[A_DEX] = OF_DEX; stat_flags[A_CON] = OF_CON; stat_flags[A_CHR] = OF_CHR; sustain_flags[A_STR] = OF_SUST_STR; sustain_flags[A_INT] = OF_SUST_INT; sustain_flags[A_WIS] = OF_SUST_WIS; sustain_flags[A_DEX] = OF_SUST_DEX; sustain_flags[A_CON] = OF_SUST_CON; sustain_flags[A_CHR] = OF_SUST_CHR; /* Header */ c_put_str(TERM_WHITE, "@abcdefghijklmnopqrstuvwxyz{|}", row-1, col); /* Process equipment */ for (i = INVEN_WIELD - 1; i < INVEN_TOTAL; ++i) { if (((i >= INVEN_WIELD) && (i < INVEN_WIELD + rp_ptr->melee_slots)) || ((i >= INVEN_BOW) && (i < INVEN_BOW + rp_ptr->range_slots)) || ((i >= INVEN_FINGER) && (i < INVEN_FINGER + rp_ptr->ring_slots)) || ((i >= INVEN_NECK) && (i < INVEN_NECK + rp_ptr->amulet_slots)) || ((i >= INVEN_LIGHT) && (i < INVEN_LIGHT + rp_ptr->light_slots)) || ((i >= INVEN_BODY) && (i < INVEN_BODY + rp_ptr->body_slots)) || ((i >= INVEN_OUTER) && (i < INVEN_OUTER + rp_ptr->cloak_slots)) || ((i >= INVEN_ARM) && (i < INVEN_ARM + rp_ptr->shield_slots)) || ((i >= INVEN_HEAD) && (i < INVEN_HEAD + rp_ptr->helm_slots)) || ((i >= INVEN_HANDS) && (i < INVEN_HANDS + rp_ptr->glove_slots)) || ((i >= INVEN_FEET) && (i < INVEN_FEET + rp_ptr->boot_slots)) || (i == INVEN_WIELD - 1)) { /* Player flags */ if (i < INVEN_WIELD) { player_flags(f); o_ptr = NULL; } else { /* Get the object */ o_ptr = &p_ptr->inventory[i]; /* Get the "known" flags */ object_flags_known(o_ptr, f); } /* Initialize color based of sign of pval. */ for (stat = 0; stat < A_MAX; stat++) { /* Default */ a = TERM_SLATE; c = '.'; /* Boost */ if (of_has(f, stat_flags[stat]) && (o_ptr != NULL)) { /* Default */ c = '*'; /* Good */ if (o_ptr->pval > 0) { /* Good */ a = TERM_L_GREEN; /* Label boost */ if (o_ptr->pval < 10) c = I2D(o_ptr->pval); } /* Bad */ if (o_ptr->pval < 0) { /* Bad */ a = TERM_RED; /* Label boost */ if (o_ptr->pval > -10) c = I2D(-(o_ptr->pval)); } } /* Sustain */ if (of_has(f, sustain_flags[stat])) { /* Dark green */ a = TERM_GREEN; /* Convert '.' to 's' */ if (c == '.') c = 's'; } if ((c == '.') && (o_ptr != NULL) && o_ptr->k_idx && !object_flag_is_known(o_ptr, sustain_flags[stat])) c = '?'; /* Dump proper character */ Term_putch(col, row+stat, a, c); } /* Advance */ col++; } } /* Check stats */ for (stat = 0; stat < A_MAX; ++stat) { /* Default */ a = TERM_SLATE; c = '.'; /* Sustain */ if (of_has(f, sustain_flags[stat])) { /* Dark green "s" */ a = TERM_GREEN; c = 's'; } /* Dump */ Term_putch(col, row+stat, a, c); } /* Column */ col = 26; /* Footer */ c_put_str(TERM_WHITE, "@abcdefghijklmnopqrstuvwxyz{|}", row+6, col); /* Equippy */ display_player_equippy(row+7, col+1); }
static int dirgen(int slot, Dir *d, void *aux) { int32_t off; FInfo *fi; int rc, got; Aux *a = aux; char *npath; int numinf = numinfo(); int slots = min(Sess->mtu, MTU) / sizeof(FInfo); if(strcmp(a->path, "/") == 0){ if(slot < numinf){ dirgeninfo(slot, d); return 0; } else slot -= numinf; if(slot >= Nshares) return -1; V2D(d, mkqid(Shares[slot].name, 1, 1, Pshare, slot), Shares[slot].name); return 0; } off = slot * sizeof(FInfo); if(off >= a->off && off < a->end && time(nil) < a->expire) goto from_cache; if(off == 0){ fi = (FInfo *)a->cache; npath = smprint("%s/*", mapfile(a->path)); a->sh = T2findfirst(Sess, a->sp, slots, npath, &got, &a->srch, (FInfo *)a->cache); free(npath); if(a->sh == -1) return -1; a->off = 0; a->end = got * sizeof(FInfo); if(got >= 2 && strcmp(fi[0].name, ".") == 0 && strcmp(fi[1].name, "..") == 0){ a->end = (got - 2) * sizeof(FInfo); memmove(a->cache, a->cache + sizeof(FInfo)*2, a->end - a->off); } } while(off >= a->end && a->sh != -1){ fi = (FInfo *)(a->cache + (a->end - a->off) - sizeof(FInfo)); a->off = a->end; npath = smprint("%s/%s", mapfile(a->path), fi->name); rc = T2findnext(Sess, a->sp, slots, npath, &got, &a->srch, (FInfo *)a->cache, a->sh); free(npath); if(rc == -1 || got == 0) break; a->end = a->off + got * sizeof(FInfo); } a->expire = time(nil) + CACHETIME; if(got < slots){ if(a->sh != -1) CIFSfindclose2(Sess, a->sp, a->sh); a->sh = -1; } if(off >= a->end) return -1; from_cache: fi = (FInfo *)(a->cache + (off - a->off)); npath = smprint("%s/%s", mapfile(a->path), fi->name); I2D(d, a->sp, npath, fi); if(Billtrog == 0) upd_names(Sess, a->sp, npath, d); free(npath); return 0; }
/* * Special display, part 2c * * How to print out the modifications and sustains. * Positive mods with no sustain will be light green. * Positive mods with a sustain will be dark green. * Sustains (with no modification) will be a dark green 's'. * Negative mods (from a curse) will be red. * Huge mods (>9), like from MICoMorgoth, will be a '*' * No mod, no sustain, will be a slate '.' */ static void display_player_sust_info(void) { int i, row, col, stat; object_type *o_ptr; bitflag f[OF_SIZE]; int stat_flags[A_MAX]; int sustain_flags[A_MAX]; byte a; char c; /* Row */ row = 2; /* Column */ col = 26; /* Build the stat flags tables */ stat_flags[A_STR] = OF_STR; stat_flags[A_INT] = OF_INT; stat_flags[A_WIS] = OF_WIS; stat_flags[A_DEX] = OF_DEX; stat_flags[A_CON] = OF_CON; stat_flags[A_CHR] = OF_CHR; sustain_flags[A_STR] = OF_SUST_STR; sustain_flags[A_INT] = OF_SUST_INT; sustain_flags[A_WIS] = OF_SUST_WIS; sustain_flags[A_DEX] = OF_SUST_DEX; sustain_flags[A_CON] = OF_SUST_CON; sustain_flags[A_CHR] = OF_SUST_CHR; /* Header */ c_put_str(TERM_WHITE, "abcdefghijkl@", row-1, col); /* Process equipment */ for (i = INVEN_WIELD; i < INVEN_TOTAL; ++i) { /* Get the object */ o_ptr = &p_ptr->inventory[i]; /* Get the "known" flags */ object_flags_known(o_ptr, f); /* Initialize color based of sign of pval. */ for (stat = 0; stat < A_MAX; stat++) { /* Default */ a = TERM_SLATE; c = '.'; /* Boost */ if (of_has(f, stat_flags[stat])) { /* Default */ c = '*'; /* Good */ if (o_ptr->pval > 0) { /* Good */ a = TERM_L_GREEN; /* Label boost */ if (o_ptr->pval < 10) c = I2D(o_ptr->pval); } /* Bad */ if (o_ptr->pval < 0) { /* Bad */ a = TERM_RED; /* Label boost */ if (o_ptr->pval > -10) c = I2D(-(o_ptr->pval)); } } /* Sustain */ if (of_has(f, sustain_flags[stat])) { /* Dark green */ a = TERM_GREEN; /* Convert '.' to 's' */ if (c == '.') c = 's'; } if ((c == '.') && o_ptr->k_idx && !object_flag_is_known(o_ptr, sustain_flags[stat])) c = '?'; /* Dump proper character */ Term_putch(col, row+stat, a, c); } /* Advance */ col++; } /* Player flags */ player_flags(f); /* Check stats */ for (stat = 0; stat < A_MAX; ++stat) { /* Default */ a = TERM_SLATE; c = '.'; /* Sustain */ if (of_has(f, sustain_flags[stat])) { /* Dark green "s" */ a = TERM_GREEN; c = 's'; } /* Dump */ Term_putch(col, row+stat, a, c); } /* Column */ col = 26; /* Footer */ c_put_str(TERM_WHITE, "abcdefghijkl@", row+6, col); /* Equippy */ display_player_equippy(row+7, col); }