Changeset 488
- Timestamp:
- Apr 17, 2011, 10:28:36 AM (11 years ago)
- Location:
- abuse/trunk/src
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
abuse/trunk/src/clisp.cpp
r486 r488 725 725 } break; 726 726 case 18 : 727 { return new_lisp_string(object_names[current_object->otype]); } break;727 { return LispString::Create(object_names[current_object->otype]); } break; 728 728 case 19 : 729 729 { return current_object->float_tick(); } break; … … 810 810 case 26 : 811 811 { 812 return new_lisp_string(current_level->name());812 return LispString::Create(current_level->name()); 813 813 } break; 814 814 case 27 : return ant_ai(); break; … … 855 855 char nm[50]; 856 856 last_savegame_name(nm); 857 return new_lisp_string(nm);857 return LispString::Create(nm); 858 858 } break; 859 859 case 45 : … … 863 863 // get_savegame_name(nm); 864 864 the_game->reset_keymap(); 865 return new_lisp_string(nm);865 return LispString::Create(nm); 866 866 } break; 867 867 case 46 : 868 868 { 869 return new_lisp_string(start_argv[lnumber_value(eval(CAR(args)))]);869 return LispString::Create(start_argv[lnumber_value(eval(CAR(args)))]); 870 870 } break; 871 871 case 47 : … … 935 935 lbreak("object is not a player, cannot return name"); 936 936 else 937 return new_lisp_string(c->name);937 return LispString::Create(c->name); 938 938 } break; 939 939 case 54 : … … 941 941 char cd[150]; 942 942 getcwd(cd,100); 943 return new_lisp_string(cd);943 return LispString::Create(cd); 944 944 } break; 945 945 case 55 : … … 964 964 *tp=0; 965 965 } 966 return new_lisp_string(tmp);966 return LispString::Create(tmp); 967 967 } break; 968 968 case 58 : … … 976 976 p_ref r1(fl),r2(dl); 977 977 978 for (i=tfiles-1;i>=0;i--) { push_onto_list( new_lisp_string(files[i]),fl); free(files[i]); }978 for (i=tfiles-1;i>=0;i--) { push_onto_list(LispString::Create(files[i]),fl); free(files[i]); } 979 979 free(files); 980 980 981 for (i=tdirs-1;i>=0;i--) { push_onto_list( new_lisp_string(dirs[i]),dl); free(dirs[i]); }981 for (i=tdirs-1;i>=0;i--) { push_onto_list(LispString::Create(dirs[i]),dl); free(dirs[i]); } 982 982 free(dirs); 983 983 … … 1012 1012 { 1013 1013 sprintf(name2,"%s%04ld.pcx",name,i); 1014 push_onto_list( new_lisp_string(name2),ret);1014 push_onto_list(LispString::Create(name2),ret); 1015 1015 } 1016 1016 } else … … 1019 1019 { 1020 1020 sprintf(name2,"%s%04ld.pcx",name,i); 1021 push_onto_list( new_lisp_string(name2),ret);1021 push_onto_list(LispString::Create(name2),ret); 1022 1022 } 1023 1023 } -
abuse/trunk/src/lcache.cpp
r486 r488 108 108 case L_STRING : 109 109 { long l=fp->read_uint32(); 110 LispString *s =new_lisp_string(l);110 LispString *s = LispString::Create(l); 111 111 fp->read(lstring_value(s),l); 112 112 return s; -
abuse/trunk/src/level.cpp
r484 r488 1510 1510 void *arg_list=NULL; 1511 1511 p_ref r1(arg_list); 1512 push_onto_list( new_lisp_string(n),arg_list);1512 push_onto_list(LispString::Create(n),arg_list); 1513 1513 eval_function((LispSymbol *)l_level_loaded,arg_list); 1514 1514 -
abuse/trunk/src/lisp/lisp.cpp
r486 r488 309 309 } 310 310 311 struct LispString *new_lisp_string(char const *string) 312 { 313 size_t size=sizeof(LispString)+strlen(string)+1; 314 if (size<8 + sizeof(intptr_t)) size=8 + sizeof(intptr_t); 315 316 LispString *s=(LispString *)lmalloc(size, current_space); 317 s->type=L_STRING; 318 char *sloc=((char *)s)+sizeof(LispString); 319 strcpy(sloc, string); 320 return s; 321 } 322 323 struct LispString *new_lisp_string(char const *string, int length) 324 { 325 size_t size=sizeof(LispString)+length+1; 326 if (size<8 + sizeof(intptr_t)) size=8 + sizeof(intptr_t); 327 LispString *s=(LispString *)lmalloc(size, current_space); 328 s->type=L_STRING; 329 char *sloc=((char *)s)+sizeof(LispString); 330 memcpy(sloc, string, length); 331 sloc[length]=0; 332 return s; 333 } 334 335 struct LispString *new_lisp_string(int length) 336 { 337 size_t size=sizeof(LispString)+length; 338 if (size<8 + sizeof(intptr_t)) size=8 + sizeof(intptr_t); 339 LispString *s=(LispString *)lmalloc(size, current_space); 340 s->type=L_STRING; 341 char *sloc=((char *)s)+sizeof(LispString); 342 strcpy(sloc, ""); 343 return s; 311 struct LispString *LispString::Create(char const *string) 312 { 313 size_t size = sizeof(LispString) + strlen(string); 314 if (size < sizeof(LispRedirect)) 315 size = sizeof(LispRedirect); 316 317 LispString *s = (LispString *)lmalloc(size, current_space); 318 s->type = L_STRING; 319 strcpy(s->str, string); 320 return s; 321 } 322 323 struct LispString *LispString::Create(char const *string, int length) 324 { 325 size_t size = sizeof(LispString) + length; 326 if (size < sizeof(LispRedirect)) 327 size = sizeof(LispRedirect); 328 329 LispString *s = (LispString *)lmalloc(size, current_space); 330 s->type = L_STRING; 331 memcpy(s->str, string, length); 332 s->str[length] = 0; 333 return s; 334 } 335 336 struct LispString *LispString::Create(int length) 337 { 338 size_t size = sizeof(LispString) + length - 1; 339 if (size < sizeof(LispRedirect)) 340 size = sizeof(LispRedirect); 341 342 LispString *s = (LispString *)lmalloc(size, current_space); 343 s->type = L_STRING; 344 s->str[0] = '\0'; 345 return s; 344 346 } 345 347 … … 433 435 LispSymbol *s=(LispSymbol *)lmalloc(sizeof(LispSymbol), current_space); 434 436 s->type=L_SYMBOL; 435 s->name= new_lisp_string(name);437 s->name=LispString::Create(name); 436 438 s->value=l_undefined; 437 439 s->function=l_undefined; … … 533 535 } 534 536 535 char * lstring_value(void *lstring)537 char *LispString::GetString() 536 538 { 537 539 #ifdef TYPE_CHECKING 538 if (item_type(lstring)!=(ltype)L_STRING) 539 { 540 lprint(lstring); 541 lbreak(" is not a string\n"); 542 exit(0); 543 } 544 #endif 545 return ((char *)lstring)+sizeof(LispString); 546 } 547 548 540 if (item_type(this) != L_STRING) 541 { 542 lprint(this); 543 lbreak(" is not a string\n"); 544 exit(0); 545 } 546 #endif 547 return str; 548 } 549 549 550 550 void *lisp_atom(void *i) … … 825 825 while (p) 826 826 { 827 int cmp = strcmp(name, ((char *)p->name) + sizeof(LispString));827 int cmp = strcmp(name, p->name->GetString()); 828 828 if (cmp == 0) 829 829 return p; … … 839 839 while (p) 840 840 { 841 int cmp = strcmp(name, ((char *)p->name) + sizeof(LispString));841 int cmp = strcmp(name, p->name->GetString()); 842 842 if (cmp == 0) 843 843 return p; … … 853 853 p = (LispSymbol *)malloc(sizeof(LispSymbol)); 854 854 p->type = L_SYMBOL; 855 p->name = new_lisp_string(name);855 p->name = LispString::Create(name); 856 856 857 857 // If constant, set the value to ourself … … 1217 1217 } else if (n[0]=='"') 1218 1218 { 1219 ret =new_lisp_string(str_token_len(s));1219 ret = LispString::Create(str_token_len(s)); 1220 1220 char *start=lstring_value(ret); 1221 1221 for (;*s && (*s!='"' || s[1]=='"');s++, start++) … … 1334 1334 break; 1335 1335 case L_SYMBOL : 1336 lprint_string(( char *)(((LispSymbol *)i)->name)+sizeof(LispString));1336 lprint_string(((LispSymbol *)i)->name->GetString()); 1337 1337 break; 1338 1338 case L_USER_FUNCTION : … … 1658 1658 { 1659 1659 int elements=list_length(el_list); // see how many things we need to concat 1660 if (!elements) ret =new_lisp_string("");1660 if (!elements) ret = LispString::Create(""); 1661 1661 else 1662 1662 { … … 1697 1697 } 1698 1698 } 1699 LispString *st =new_lisp_string(len+1);1699 LispString *st = LispString::Create(len+1); 1700 1700 char *s=lstring_value(st); 1701 1701 … … 2331 2331 while (dig--) 2332 2332 *(tp--)='0'; 2333 ret= new_lisp_string(tp+1);2333 ret=LispString::Create(tp+1); 2334 2334 } break; 2335 2335 case SYS_FUNC_LOCAL_LOAD: … … 2765 2765 char str[20]; 2766 2766 sprintf(str, "%ld", (long int)lnumber_value(eval(CAR(arg_list)))); 2767 ret= new_lisp_string(str);2767 ret=LispString::Create(str); 2768 2768 } break; 2769 2769 case SYS_FUNC_NCONC: … … 2821 2821 lbreak("substr : bad x1 or x2 value"); 2822 2822 2823 LispString *s= new_lisp_string(x2-x1+2);2823 LispString *s=LispString::Create(x2-x1+2); 2824 2824 if (x2-x1) 2825 2825 memcpy(lstring_value(s), lstring_value(st)+x1, x2-x1+1); -
abuse/trunk/src/lisp/lisp.h
r486 r488 75 75 struct LispString : LispObject 76 76 { 77 static LispString *Create(char const *string); 78 static LispString *Create(char const *string, int length); 79 static LispString *Create(int length); 80 81 char *GetString(); 82 83 char str[1]; 77 84 }; 78 85 … … 153 160 void *lpointer_value(void *lpointer); 154 161 int32_t lnumber_value(void *lnumber); 155 char *lstring_value(void *lstring);156 162 unsigned short lcharacter_value(void *c); 157 163 long lfixed_point_value(void *c); … … 184 190 LispPointer *new_lisp_pointer(void *addr); 185 191 LispChar *new_lisp_character(uint16_t ch); 186 LispString *new_lisp_string(char const *string);187 LispString *new_lisp_string(char const *string, int length);188 LispString *new_lisp_string(int length);189 192 LispFixedPoint *new_lisp_fixed_point(int32_t x); 190 193 LispObjectVar *new_lisp_object_var(int16_t number); … … 230 233 // FIXME: get rid of this later 231 234 static inline void *symbol_value(void *sym) { return ((LispSymbol *)sym)->GetValue(); } 232 233 234 235 #endif 235 static inline char *lstring_value(void *str) { return ((LispString *)str)->GetString(); } 236 237 238 239 #endif -
abuse/trunk/src/lisp/lisp_gc.cpp
r486 r488 156 156 break; 157 157 case L_STRING: 158 ret = new_lisp_string(lstring_value(x));158 ret = LispString::Create(lstring_value(x)); 159 159 break; 160 160 case L_CHARACTER: -
abuse/trunk/src/view.cpp
r484 r488 460 460 void *m=mark_heap(TMP_SPACE); 461 461 void *list=NULL; 462 push_onto_list( new_lisp_string(chat_buf),list);462 push_onto_list(LispString::Create(chat_buf),list); 463 463 eval_function((LispSymbol *)l_chat_input,list); 464 464 restore_heap(m,TMP_SPACE);
Note: See TracChangeset
for help on using the changeset viewer.