void tex::make_accent () { fnt f; qcell i; ptr p, q, r; scal a, h, w, x; float s, t; scal delta; scan_char_num(); f = cur_font; p = new_character(f, cur_val); if (p != null) { x = x_height(f); s = (float) slant(f) / 65536.0; a = char_width(f, char_info(f, character(p))); do_assignments(); q = null; f = cur_font; if (cur_cmd == LETTER || cur_cmd == OTHER_CHAR || cur_cmd == CHAR_GIVEN) { q = new_character(f, cur_chr); } else if (cur_cmd == CHAR_NUM) { scan_char_num(); q = new_character(f, cur_val); } else { back_input(); } if (q != null) { t = (float) slant(f) / 65536.0; i = char_info(f, character(q)); w = char_width(f, i); h = char_height(f, height_depth(i)); if (h != x) { p = hpack(p, 0, ADDITIONAL); shift_amount(p) = x - h; } delta = round((float) (w - a) / 2.0 + h * t - x * s); r = new_kern(delta); subtype(r) = ACC_KERN; link(tail) = r; link(r) = p; tail = new_kern(-a - delta); subtype(tail) = ACC_KERN; link(p) = tail; p = q; } tail_append(p); space_factor = 1000; } }
void finish_creation(DESCRIPTOR_DATA *d, int hardcore) { char buf[MAX_STRING_LENGTH]; d->state = STATE_ACCT_MENU; d->acc->charcount++; d->acc->totalchars++; d->acc->ch = new_character(); strlcpy(d->acc->ch->name, d->acc->character[d->acc->charcount-1], 32); strlcpy(d->acc->ch->accname, d->acc->name, 32); snprintf(buf, MAX_STRING_LENGTH, "Character %s created.\n", d->acc->ch->name); send_to_descriptor(d, buf); buf[0] = 0; if (hardcore) { SET_BIT(d->acc->ch->cflags, CFLAG_HARDCORE); snprintf(buf, MAX_STRING_LENGTH, "hardcore "); d->acc->status[d->acc->charcount-1] = CHSTATUS_HARDCORE; } else d->acc->status[d->acc->charcount-1] = CHSTATUS_NORMAL; log_time(d->acc->chfirsttime[d->acc->charcount-1]); syslog("CREATION", "New %scharacter %s (on %s@%s) has been created.", buf, d->acc->ch->name, d->acc->name, d->ip); save_account(d->acc); free_character(d->acc->ch); d->acc->ch = NULL; show_account_menu(d, 1); if (d->acc->logins == 1) send_to_descriptor(d, "\n#r[#1HINT#r]#3 Press '#R1#3' to log into your new character.\n"); }
void mm_init_memory_cache() { int i; int int_value; for (i=0;i<65535;i++) { int_value=i-32767; integer_cache[i]=new_integer(int_value); mm_inc_ref(integer_cache[i]); } for (i=0;i<255;i++) { character_cache[i]=new_character(i); mm_inc_ref(character_cache[i]); } }
void tex::append_discretionary () { int c; tail_append(new_disc()); if (cur_chr == 1) { c = hyphen_char(cur_font); if (c >= 0 && c < 256) pre_break(tail) = new_character(cur_font, c); } else { incr(save_ptr); saved(-1) = 0; scan_left_brace(); new_save_level(DISC_GROUP); push_nest(); mode = -HMODE; space_factor = 1000; } }
/* * Load a char and inventory into a new ch structure. */ bool load_char_obj( struct descriptor_data * d, const char * name ) { FILE *fp; struct char_data *ch; char strsave [ MAX_INPUT_LENGTH ]; bool found; char sorry_player [] = "********************************************************\n\r" "** One or more of the critical fields in your player **\n\r" "** file were corrupted since you last played. Please **\n\r" "** contact an administrator or programmer to **\n\r" "** investigate the recovery of your characters. **\n\r" "********************************************************\n\r"; char sorry_object [] = "********************************************************\n\r" "** One or more of the critical fields in your player **\n\r" "** file were corrupted leading to the loss of one or **\n\r" "** more of your possessions. **\n\r" "********************************************************\n\r"; char sorry_alias [] = "********************************************************\n\r" "** One or more of the critical fields in your player **\n\r" "** file were corrupted leading to the loss of one or **\n\r" "** more of your aliases. **\n\r" "********************************************************\n\r"; ch = new_character( TRUE ); d->character = ch; GET_DESC(ch) = d; ch->player.name = str_dup( name ); /* ch->pcdata->prompt = str_dup( daPrompt ); ch->last_note = 0; */ strcpy( GET_PASSWD(ch), "" ); POOFIN(ch) = str_dup( "" ); POOFOUT(ch) = str_dup( "" ); GET_TITLE(ch) = str_dup( "" ); GET_STR(ch) = 10; GET_ADD(ch) = 10; GET_INT(ch) = 10; GET_WIS(ch) = 10; GET_DEX(ch) = 10; GET_CON(ch) = 10; GET_CHA(ch) = 10; GET_WILL(ch) = 10; GET_COND(ch, DRUNK) = 48; GET_COND(ch, FULL) = 48; GET_COND(ch, THIRST) = 48; GET_COND(ch, TIRED) = 48; // ch->pcdata->switched = FALSE; found = FALSE; fclose( fpReserve ); /* parsed player file directories by Yaz of 4th Realm */ /* decompress if .gz file exists - Thx Alander */ sprintf( strsave, "%s/%s/%s%s", PLAYER_DIR, player_dir( GET_NAME(ch) ), capitalize( GET_NAME(ch) ), ".gz" ); if ( ( fp = fopen( strsave, "r" ) ) ) { char buf [ MAX_STRING_LENGTH ]; fclose( fp ); sprintf( buf, "gzip -dfq %s", strsave ); system( buf ); } sprintf( strsave, "%s/%s/%s", PLAYER_DIR, player_dir( GET_NAME(ch) ), capitalize( GET_NAME(ch) ) ); if ( ( fp = fopen( strsave, "r" ) ) ) { char buf[ MAX_STRING_LENGTH ]; int iNest; for ( iNest = 0; iNest < MAX_NEST; iNest++ ) rgObjNest[iNest] = NULL; found = TRUE; for ( ; ; ) { char *word; char letter; int status; letter = fread_letter( fp ); if ( letter == '*' ) { fread_to_eol( fp ); continue; } if ( letter != '#' ) { log( "Load_char_obj: # not found." ); break; } word = fread_word_stat( fp, &status ); if ( !str_cmp( word, "PLAYER" ) ) { if ( fread_char ( ch, fp ) ) { sprintf( buf, "Load_char_obj: %s section PLAYER corrupt.\n\r", name ); log( buf ); SEND_TO_Q( sorry_player, d ); /* * In case you are curious, * it is ok to leave ch alone for close_socket * to free. * We want to now kick the bad character out as * what we are missing are MANDATORY fields. -Kahn */ SET_BIT( PRF_FLAGS(ch), PLR_DELETED ); return TRUE; } } else if ( !str_cmp( word, "OBJECT" ) ) { if ( !fread_obj_char( ch, fp ) ) { sprintf( buf, "Load_char_obj: %s section OBJECT corrupt.\n\r", name ); log( buf ); SEND_TO_Q( sorry_object, d ); return FALSE; } } else if ( !str_cmp( word, "ALIAS" ) ) { if ( !fread_alias( ch, fp ) ) { sprintf( buf, "Load_char_obj: %s section ALIAS corrupt.\n\r", name ); log( buf ); SEND_TO_Q( sorry_alias, d ); return FALSE; } } else if ( !str_cmp( word, "END" ) ) break; else { log( "Load_char_obj: bad section." ); break; } } /* for */ fclose( fp ); } fpReserve = fopen( NULL_FILE, "r" ); if ( found ) rent_adjust( d->character ); return found; }
/* * Load a char and inventory into a new ch structure. */ bool load_char_obj( DESCRIPTOR_DATA *d, char *name ) { extern char *daPrompt; FILE *fp; CHAR_DATA *ch; char strsave [ MAX_INPUT_LENGTH ]; bool found; char sorry_player [] = "********************************************************\r\n" "** One or more of the critical fields in your player **\r\n" "** file were corrupted since you last played. Please **\r\n" "** contact an administrator or programmer to **\r\n" "** investigate the recovery of your characters. **\r\n" "********************************************************\r\n"; char sorry_object [] = "********************************************************\r\n" "** One or more of the critical fields in your player **\r\n" "** file were corrupted leading to the loss of one or **\r\n" "** more of your possessions. **\r\n" "********************************************************\r\n"; ch = new_character( TRUE ); d->character = ch; ch->desc = d; ch->name = str_dup( name ); ch->pcdata->prompt = str_dup( daPrompt ); ch->last_note = 0; ch->act = PLR_BLANK | PLR_COMBINE | PLR_PROMPT; ch->pcdata->pwd = str_dup( "" ); ch->pcdata->bamfin = str_dup( "" ); ch->pcdata->bamfout = str_dup( "" ); ch->pcdata->immskll = str_dup( "" ); ch->pcdata->title = str_dup( "" ); ch->pcdata->perm_str = 13; ch->pcdata->perm_int = 13; ch->pcdata->perm_wis = 13; ch->pcdata->perm_dex = 13; ch->pcdata->perm_con = 13; ch->pcdata->condition[COND_THIRST] = 48; ch->pcdata->condition[COND_FULL] = 48; ch->pcdata->pagelen = 20; ch->pcdata->switched = FALSE; found = FALSE; fclose( fpReserve ); /* parsed player file directories by Yaz of 4th Realm */ /* decompress if .gz file exists - Thx Alander */ sprintf( strsave, "%s%s%s%s%s", PLAYER_DIR, initial( ch->name ), "/", capitalize( name ), ".gz" ); if ( ( fp = fopen( strsave, "r" ) ) ) { char buf [ MAX_STRING_LENGTH ]; fclose( fp ); sprintf( buf, "gzip -dfq %s", strsave ); system( buf ); } sprintf( strsave, "%s%s%s%s", PLAYER_DIR, initial( ch->name ), "/", capitalize( name ) ); if ( ( fp = fopen( strsave, "r" ) ) ) { char buf[ MAX_STRING_LENGTH ]; int iNest; for ( iNest = 0; iNest < MAX_NEST; iNest++ ) rgObjNest[iNest] = NULL; found = TRUE; for ( ; ; ) { char *word; char letter; int status; letter = fread_letter( fp ); if ( letter == '*' ) { fread_to_eol( fp ); continue; } if ( letter != '#' ) { bug( "Load_char_obj: # not found.", 0 ); break; } word = fread_word( fp, &status ); if ( !str_cmp( word, "PLAYER" ) ) { if ( fread_char ( ch, fp ) ) { sprintf( buf, "Load_char_obj: %s section PLAYER corrupt.\r\n", name ); bug( buf, 0 ); write_to_buffer( d, sorry_player, 0 ); /* * In case you are curious, * it is ok to leave ch alone for close_socket * to free. * We want to now kick the bad character out as * what we are missing are MANDATORY fields. -Kahn */ SET_BIT( ch->act, PLR_DENY ); return TRUE; } } else if ( !str_cmp( word, "OBJECT" ) ) { if ( !fread_obj ( ch, fp ) ) { sprintf( buf, "Load_char_obj: %s section OBJECT corrupt.\r\n", name ); bug( buf, 0 ); write_to_buffer( d, sorry_object, 0 ); return FALSE; } } else if ( !str_cmp( word, "END" ) ) break; else { bug( "Load_char_obj: bad section.", 0 ); break; } } /* for */ fclose( fp ); } fpReserve = fopen( NULL_FILE, "r" ); return found; }
// Parses any expression. struct ParseResult parse(const char *text) { struct ParseResult result; result.err_type = PARSE_SUCCESS; const char *s = text; s += skip_whitespace(s); size_t len; switch (*s) { case '\0': result.err_type = ERR_UNEXPECTED_EOI; break; case '(': s++; result = parse_pair(s); s += result.chars_read; break; case ')': result.err_type = ERR_UNEXPECTED_RPAREN; break; case '.': result.err_type = ERR_INVALID_DOT; break; case '#': len = skip_symbol(s + 1); if (len == 1 && s[1] == 't') { s += 2; result.expr = new_boolean(true); } else if (len == 1 && s[1] == 'f') { s += 2; result.expr = new_boolean(false); } else if (len > 2 && s[1] == '\\') { char c = parse_char_name(s + 2, len - 1); if (c == '\0') { s += 2; result.err_type = ERR_UNKNOWN_CHARACTER; } else { s += 1 + len; result.expr = new_character(c); } } else if (s[1] == '\\' && s[2] && !isspace(s[2])) { result.expr = new_character(s[2]); s += 3; } else { result.err_type = ERR_INVALID_LITERAL; } break; case '\'': s++; result = parse(s); s += result.chars_read; if (result.err_type == PARSE_SUCCESS) { result.expr = new_pair( new_stdmacro(F_QUOTE), new_pair(result.expr, new_null())); } break; case '`': s++; result = parse(s); s += result.chars_read; if (result.err_type == PARSE_SUCCESS) { result.expr = new_pair( new_stdmacro(F_QUASIQUOTE), new_pair(result.expr, new_null())); } break; case ',': s++; enum StandardMacro stdmacro = F_UNQUOTE; if (*s == '@') { s++; stdmacro = F_UNQUOTE_SPLICING; } result = parse(s); s += result.chars_read; if (result.err_type == PARSE_SUCCESS) { result.expr = new_pair( new_stdmacro(stdmacro), new_pair(result.expr, new_null())); } break; case '"': s++; len = skip_string(s); if (!(s[len-1] == '\\' && (len < 2 || s[len-2] == '\\')) && s[len] == '"') { result.expr = parse_string(s, len); } else { result.err_type = ERR_UNEXPECTED_EOI; } s += len; s++; break; default:; len = skip_symbol(s); assert(len > 0); Number number; if (parse_number(s, len, &number)) { result.expr = new_number(number); } else { InternId symbol_id = intern_string_n(s, len); result.expr = new_symbol(symbol_id); } s += len; break; } if (result.err_type == PARSE_SUCCESS) { s += skip_whitespace(s); assert(s > text); } result.chars_read = (size_t)(s - text); return result; }
/* ------------------------ */ button_click() { register int object; /* 'TOP LINE': oberste Begrenzung aller Zeichen. */ /* 'ASCENT LINE': oberste Zeile aller Gro�buchstaben */ /* 'HALF LINE': oberste Zeile aller Kleinbuchstaben */ /* 'BASE LINE': unterste Zeile aller Zeichen ohne Unterl�nge */ /*'DESCENT LINE': unterste Zeile aller Zeichen mit Unterl�ngen */ /* 'BOTTOM LINE': unterste Begrenzung aller Zeichen. */ object = objc_find(font_back, ROOT, MAX_DEPTH, mousex, mousey); switch(object) { case TOP: case ASCENT: case HALF: case BASE: case BOTTOM: case DESCENT: if (clicks == 1 && object != TOP) move_line(object); else switch(object) { case TOP: form_alert(1, "[1]['TOP LINE':| |oberste Begrenzung aller |Zeichen.][ OK ]"); break; case ASCENT: form_alert(1, "[1]['ASCENT LINE':| |oberste Zeile aller |Gro�buchstaben.][ OK ]"); break; case HALF: form_alert(1, "[1]['HALF LINE':| |oberste Zeile aller |Kleinbuchstaben.][ OK ]"); break; case BASE: form_alert(1, "[1]['BASE LINE':| |unterste Zeile aller |Zeichen ohne Unterl�nge][ OK ]"); break; case BOTTOM: form_alert(1, "[1]['BOTTOM LINE':| |unterste Begrenzung |aller Zeichen.][ OK ]"); break; case DESCENT: form_alert(1, "[1]['DESCENT LINE':| |unterste Zeile aller |Zeichen mit Unterl�ngen.][ OK ]"); break; } break; case F_BKG: /* Editierfeld */ draw_fpoint(); break; case SCL_RGT: /* Skala rechts */ scale_right(); break; case SCL_LFT: /* Skala links */ scale_left(); break; case ROOT: /* Hintergrund */ break; case FONTNAME: /* Fontname */ edit_name(); break; case UP: /* Editorzeile hoch */ edit_up(); break; case DOWN: /* Editorzeile runter */ edit_dwn(); break; case LEFT: /* Editorspalte links */ edit_lft(); break; case RIGHT: /* Editorspalte rechts */ edit_rgt(); break; default: /* FONTLINE */ new_character(); break; } }