Changeset 490 for abuse/trunk
- Timestamp:
- Apr 17, 2011, 10:28:44 AM (12 years ago)
- Location:
- abuse/trunk/src
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
abuse/trunk/src/collide.cpp
r481 r490 112 112 if (x1<p->x1) 113 113 { 114 add_collide(first,x1, max(y1,p->y1),p->x1-1,min(y2,p->y2),who);114 add_collide(first,x1,Max(y1,p->y1),p->x1-1,Min(y2,p->y2),who); 115 115 ax1=p->x1; 116 116 } else … … 119 119 if (x2>p->x2) 120 120 { 121 add_collide(first,p->x2+1, max(y1,p->y1),x2,min(y2,p->y2),who);121 add_collide(first,p->x2+1,Max(y1,p->y1),x2,Min(y2,p->y2),who); 122 122 ax2=p->x2; 123 123 } -
abuse/trunk/src/game.cpp
r484 r490 1897 1897 { 1898 1898 if(ev.message.id == RAISE_SFX && sfx_volume != 127) 1899 sfx_volume = min(127, sfx_volume + 16);1899 sfx_volume = Min(127, sfx_volume + 16); 1900 1900 if(ev.message.id == LOWER_SFX && sfx_volume != 0) 1901 sfx_volume = max(sfx_volume - 16, 0);1901 sfx_volume = Max(sfx_volume - 16, 0); 1902 1902 if(ev.message.id == RAISE_MUSIC && music_volume != 126) 1903 1903 { 1904 music_volume = min(music_volume + 16, 127);1904 music_volume = Min(music_volume + 16, 127); 1905 1905 if(current_song && (sound_avail & MUSIC_INITIALIZED)) 1906 1906 current_song->set_volume(music_volume); … … 1909 1909 if(ev.message.id == LOWER_MUSIC && music_volume != 0) 1910 1910 { 1911 music_volume = max(music_volume - 16, 0);1911 music_volume = Max(music_volume - 16, 0); 1912 1912 if(current_song && (sound_avail & MUSIC_INITIALIZED)) 1913 1913 current_song->set_volume(music_volume); -
abuse/trunk/src/imlib/image.cpp
r481 r490 537 537 while (i<=x2) 538 538 { 539 xl= min(w-xx, x2-i+1);539 xl=Min(w-xx, x2-i+1); 540 540 541 541 memcpy(&pg1[i], &pg2[xx], xl); … … 1023 1023 { 1024 1024 if (x1<p->dx1) 1025 add_dirty(x1, max(y1, p->dy1), p->dx1-1, min(y2, p->dy2));1025 add_dirty(x1, Max(y1, p->dy1), p->dx1-1, Min(y2, p->dy2)); 1026 1026 if (x2>p->dx2) 1027 add_dirty(p->dx2+1, max(y1, p->dy1), x2, min(y2, p->dy2));1027 add_dirty(p->dx2+1, Max(y1, p->dy1), x2, Min(y2, p->dy2)); 1028 1028 if (y1<p->dy1) 1029 1029 add_dirty(x1, y1, x2, p->dy1-1); … … 1199 1199 { 1200 1200 special->get_clip(cx1, cy1, cx2, cy2); 1201 x1= max(x1, cx1); y1=max(cy1, y1); x2=min(x2, cx2); y2=min(y2, cy2);1201 x1=Max(x1, cx1); y1=Max(cy1, y1); x2=Min(x2, cx2); y2=Min(y2, cy2); 1202 1202 } 1203 1203 int16_t xsrc, ysrc, xdst, ydst, xtot=x2-x1-abs(xd)+1, ytot, xt; -
abuse/trunk/src/imlib/macs.h
r481 r490 25 25 #endif 26 26 27 28 #ifndef min 29 #define min(x,y) (x<y ? x:y) 30 #endif 31 #ifndef max 32 #define max(x,y) (x>y ? x:y) 33 #endif 34 35 //#define uchar unsigned char 36 //#define schar signed char 37 //#define ushort unsigned short 38 //typedef unsigned short int ushort; 39 //#define sshort signed short 40 //#define ulong unsigned long 41 //typedef unsigned long int ulong; 27 static inline int Min(int a, int b) { return a < b ? a : b; } 28 static inline int Max(int a, int b) { return a > b ? a : b; } 29 static inline float Min(float a, float b) { return a < b ? a : b; } 30 static inline float Max(float a, float b) { return a > b ? a : b; } 42 31 43 32 #endif -
abuse/trunk/src/imlib/timage.cpp
r481 r490 256 256 ysteps-=(y+ysteps-y2-1); 257 257 258 screen->add_dirty( max(x,x1),y,min(x+width()-1,x2),y+h-1);258 screen->add_dirty(Max(x,x1),y,Min(x+width()-1,x2),y+h-1); 259 259 return datap; 260 260 } -
abuse/trunk/src/items.cpp
r481 r490 62 62 } 63 63 64 maxx= max(x1,x2);65 maxy= max(y1,y2);66 minx= min(x1,x2);67 miny= min(y1,y2);64 maxx=Max(x1,x2); 65 maxy=Max(y1,y2); 66 minx=Min(x1,x2); 67 miny=Min(y1,y2); 68 68 69 69 if (skip_next) … … 147 147 148 148 149 maxx= max(x1,x2);150 maxy= max(y1,y2);151 minx= min(x1,x2);152 miny= min(y1,y2);149 maxx=Max(x1,x2); 150 maxy=Max(y1,y2); 151 minx=Min(x1,x2); 152 miny=Min(y1,y2); 153 153 154 154 if (skip_next) -
abuse/trunk/src/lcache.cpp
r488 r490 131 131 x--; 132 132 } 133 if (t<0) 134 last->cdr=load_block(fp); 135 else last->cdr=NULL; 136 133 last->cdr = (t < 0) ? (LispObject *)load_block(fp) : NULL; 134 137 135 for (last=first,x=0;x<abs(t);x++,last=(LispList *)last->cdr) 138 last->car =load_block(fp);136 last->car = (LispObject *)load_block(fp); 139 137 return first; 140 138 } -
abuse/trunk/src/level.cpp
r488 r490 2633 2633 if (blockx2>=foreground_width()) { x2=tl*foreground_width()-1; } 2634 2634 if (blocky2>=foreground_height()) { y2=th*foreground_height()-1; } 2635 blockx1= max(blockx1,0);2636 blocky1= max(blocky1,0);2635 blockx1=Max(blockx1,0); 2636 blocky1=Max(blocky1,0); 2637 2637 2638 2638 if ((blockx1>blockx2) || (blocky1>blocky2)) return ; -
abuse/trunk/src/light.cpp
r481 r490 489 489 if (x1<p->x1) 490 490 { 491 add_light(first,x1, max(y1,p->y1),p->x1-1,min(y2,p->y2),who);491 add_light(first,x1,Max(y1,p->y1),p->x1-1,Min(y2,p->y2),who); 492 492 ax1=p->x1; 493 493 } else … … 496 496 if (x2>p->x2) 497 497 { 498 add_light(first,p->x2+1, max(y1,p->y1),x2,min(y2,p->y2),who);498 add_light(first,p->x2+1,Max(y1,p->y1),x2,Min(y2,p->y2),who); 499 499 ax2=p->x2; 500 500 } -
abuse/trunk/src/lisp/lisp.cpp
r489 r490 895 895 } 896 896 897 long list_length(void *i)898 { 899 long x;897 size_t LispList::GetLength() 898 { 899 size_t ret = 0; 900 900 901 901 #ifdef TYPE_CHECKING 902 if (i && item_type(i)!=(ltype)L_CONS_CELL) 903 { 904 lprint(i); 905 lbreak(" is not a sequence\n"); 906 exit(0); 907 } 908 #endif 909 910 for(x = 0; i; i = CDR(i)) 911 x++; 912 return x; 913 } 914 915 902 if (this && item_type(this) != (ltype)L_CONS_CELL) 903 { 904 lprint(this); 905 lbreak(" is not a sequence\n"); 906 exit(0); 907 } 908 #endif 909 910 for (LispObject *p = this; p; p = CDR(p)) 911 ret++; 912 return ret; 913 } 916 914 917 915 void *pairlis(void *list1, void *list2, void *list3) 918 { 916 { 919 917 if (item_type(list1)!=(ltype)L_CONS_CELL || item_type(list1)!=item_type(list2)) 920 918 return NULL; 921 919 922 920 void *ret=NULL; 923 long l1=list_length(list1), l2=list_length(list2); 921 size_t l1 = ((LispList *)list1)->GetLength(); 922 size_t l2 = ((LispList *)list2)->GetLength(); 923 924 924 if (l1!=l2) 925 { 925 { 926 926 lprint(list1); 927 927 lprint(list2); … … 938 938 if (!first) first=cur; 939 939 if (last) 940 ((LispList *)last)->cdr= cur;940 ((LispList *)last)->cdr=(LispObject *)cur; 941 941 last=cur; 942 943 LispList *cell=new_cons_cell(); 942 943 LispList *cell=new_cons_cell(); 944 944 tmp=lcar(list1); 945 ((LispList *)cell)->car =tmp;945 ((LispList *)cell)->car = (LispObject *)tmp; 946 946 tmp=lcar(list2); 947 ((LispList *)cell)->cdr =tmp;948 ((LispList *)cur)->car =cell;947 ((LispList *)cell)->cdr = (LispObject *)tmp; 948 ((LispList *)cur)->car = (LispObject *)cell; 949 949 950 950 list1=((LispList *)list1)->cdr; 951 951 list2=((LispList *)list2)->cdr; 952 952 } 953 ((LispList *)cur)->cdr =list3;953 ((LispList *)cur)->cdr = (LispObject *)list3; 954 954 ret=first; 955 955 } else ret=NULL; … … 1107 1107 p_ref r1(object), r2(list); 1108 1108 LispList *c=new_cons_cell(); 1109 c->car =object;1110 c->cdr =list;1109 c->car = (LispObject *)object; 1110 c->cdr = (LispObject *)list; 1111 1111 list=c; 1112 1112 } … … 1131 1131 c2=new_cons_cell(); 1132 1132 tmp=compile(s); 1133 ((LispList *)c2)->car =tmp;1133 ((LispList *)c2)->car = (LispObject *)tmp; 1134 1134 ((LispList *)c2)->cdr=NULL; 1135 ((LispList *)cs)->cdr =c2;1135 ((LispList *)cs)->cdr = (LispObject *)c2; 1136 1136 ret=cs; 1137 1137 } … … 1144 1144 c2=new_cons_cell(); 1145 1145 tmp=compile(s); 1146 ((LispList *)c2)->car =tmp;1146 ((LispList *)c2)->car = (LispObject *)tmp; 1147 1147 ((LispList *)c2)->cdr=NULL; 1148 ((LispList *)cs)->cdr =c2;1148 ((LispList *)cs)->cdr = (LispObject *)c2; 1149 1149 ret=cs; 1150 1150 } else if (n[0]==',') // short hand for comma function … … 1156 1156 c2=new_cons_cell(); 1157 1157 tmp=compile(s); 1158 ((LispList *)c2)->car =tmp;1158 ((LispList *)c2)->car = (LispObject *)tmp; 1159 1159 ((LispList *)c2)->cdr=NULL; 1160 ((LispList *)cs)->cdr =c2;1160 ((LispList *)cs)->cdr = (LispObject *)c2; 1161 1161 ret=cs; 1162 1162 } … … 1187 1187 read_ltoken(s, n); // skip the '.' 1188 1188 tmp=compile(s); 1189 ((LispList *)last)->cdr =tmp; // link the last cdr to1189 ((LispList *)last)->cdr = (LispObject *)tmp; // link the last cdr to 1190 1190 last=NULL; 1191 1191 } … … 1199 1199 if (!first) first=cur; 1200 1200 tmp=compile(s); 1201 ((LispList *)cur)->car =tmp;1201 ((LispList *)cur)->car = (LispObject *)tmp; 1202 1202 if (last) 1203 ((LispList *)last)->cdr =cur;1203 ((LispList *)last)->cdr = (LispObject *)cur; 1204 1204 last=cur; 1205 1205 } … … 1250 1250 p_ref r4(cs), r5(c2); 1251 1251 tmp = LispSymbol::FindOrCreate("function"); 1252 ((LispList *)cs)->car =tmp;1252 ((LispList *)cs)->car = (LispObject *)tmp; 1253 1253 c2=new_cons_cell(); 1254 1254 tmp=compile(s); 1255 ((LispList *)c2)->car =tmp;1256 ((LispList *)cs)->cdr =c2;1255 ((LispList *)c2)->car = (LispObject *)tmp; 1256 ((LispList *)cs)->cdr = (LispObject *)c2; 1257 1257 ret=cs; 1258 1258 } … … 1515 1515 if (first) { 1516 1516 tmp=new_cons_cell(); 1517 ((LispList *)cur)->cdr =tmp;1517 ((LispList *)cur)->cdr = (LispObject *)tmp; 1518 1518 cur=tmp; 1519 1519 } else … … 1521 1521 1522 1522 void *val=eval(CAR(arg_list)); 1523 ((LispList *)cur)->car =val;1523 ((LispList *)cur)->car = (LispObject *)val; 1524 1524 arg_list=lcdr(arg_list); 1525 1525 } … … 1582 1582 } 1583 1583 } 1584 int num_args=list_length(CDR(arg_list)), i, stop=0;1584 int i, stop = 0, num_args = ((LispList *)CDR(arg_list))->GetLength(); 1585 1585 if (!num_args) return 0; 1586 1586 … … 1617 1617 else 1618 1618 { 1619 na_list->cdr =new_cons_cell();1619 na_list->cdr = (LispObject *)new_cons_cell(); 1620 1620 na_list=(LispList *)CDR(na_list); 1621 1621 } … … 1624 1624 if (arg_on[i]) 1625 1625 { 1626 na_list->car =CAR(arg_on[i]);1626 na_list->car = (LispObject *)CAR(arg_on[i]); 1627 1627 arg_on[i]=(LispList *)CDR(arg_on[i]); 1628 1628 } … … 1632 1632 { 1633 1633 LispList *c=new_cons_cell(); 1634 c->car =eval_function((LispSymbol *)sym, first);1634 c->car = (LispObject *)eval_function((LispSymbol *)sym, first); 1635 1635 if (return_list) 1636 1636 last_return->cdr=c; … … 1657 1657 if (rtype==string_symbol) 1658 1658 { 1659 int elements =list_length(el_list);// see how many things we need to concat1659 int elements = ((LispList *)el_list)->GetLength(); // see how many things we need to concat 1660 1660 if (!elements) ret = LispString::Create(""); 1661 1661 else … … 1758 1758 { 1759 1759 tmp=eval(CAR(CDR(args))); 1760 ((LispList *)last)->cdr =tmp;1760 ((LispList *)last)->cdr = (LispObject *)tmp; 1761 1761 args=NULL; 1762 1762 } … … 1765 1765 cur=new_cons_cell(); 1766 1766 if (first) 1767 ((LispList *)last)->cdr =cur;1767 ((LispList *)last)->cdr = (LispObject *)cur; 1768 1768 else 1769 1769 first=cur; 1770 1770 last=cur; 1771 1771 tmp=backquote_eval(CAR(args)); 1772 ((LispList *)cur)->car =tmp;1772 ((LispList *)cur)->car = (LispObject *)tmp; 1773 1773 args=CDR(args); 1774 1774 } … … 1776 1776 { 1777 1777 tmp=backquote_eval(args); 1778 ((LispList *)last)->cdr =tmp;1778 ((LispList *)last)->cdr = (LispObject *)tmp; 1779 1779 args=NULL; 1780 1780 } … … 1813 1813 { 1814 1814 case L_STRING : ret = LispNumber::Create(strlen(lstring_value(v))); break; 1815 case L_CONS_CELL : ret = LispNumber::Create( list_length(v)); break;1815 case L_CONS_CELL : ret = LispNumber::Create(((LispList *)v)->GetLength()); break; 1816 1816 default : 1817 1817 { lprint(v); … … 1828 1828 cur=new_cons_cell(); 1829 1829 void *val=eval(CAR(arg_list)); 1830 ((LispList *) cur)->car =val;1830 ((LispList *) cur)->car = (LispObject *)val; 1831 1831 if (last) 1832 ((LispList *)last)->cdr =cur;1832 ((LispList *)last)->cdr = (LispObject *)cur; 1833 1833 else first=cur; 1834 1834 last=cur; … … 1841 1841 p_ref r1(c); 1842 1842 void *val=eval(CAR(arg_list)); 1843 ((LispList *)c)->car =val;1843 ((LispList *)c)->car = (LispObject *)val; 1844 1844 val=eval(CAR(CDR(arg_list))); 1845 ((LispList *)c)->cdr =val;1845 ((LispList *)c)->cdr = (LispObject *)val; 1846 1846 ret=c; 1847 1847 } break; … … 1984 1984 if (!car || item_type(car)!=L_CONS_CELL) 1985 1985 { lprint(car); lbreak("setq car : evaled object is not a cons cell\n"); exit(0); } 1986 ((LispList *)car)->car =set_to;1986 ((LispList *)car)->car = (LispObject *)set_to; 1987 1987 } else if (car==cdr_symbol) 1988 1988 { … … 1990 1990 if (!car || item_type(car)!=L_CONS_CELL) 1991 1991 { lprint(car); lbreak("setq cdr : evaled object is not a cons cell\n"); exit(0); } 1992 ((LispList *)car)->cdr =set_to;1992 ((LispList *)car)->cdr = (LispObject *)set_to; 1993 1993 } else if (car==aref_symbol) 1994 1994 { … … 2051 2051 p_ref r1(i1); 2052 2052 LispList *cs=new_cons_cell(); 2053 cs->car =i1;2054 cs->cdr =i2;2053 cs->car = (LispObject *)i1; 2054 cs->cdr = (LispObject *)i2; 2055 2055 ret=cs; 2056 2056 } break; … … 2786 2786 next=l1; 2787 2787 while (next) { l1=next; next=lcdr(next); } 2788 ((LispList *)l1)->cdr =eval(CAR(arg_list));2788 ((LispList *)l1)->cdr = (LispObject *)eval(CAR(arg_list)); 2789 2789 arg_list=CDR(arg_list); 2790 2790 } while (arg_list); … … 2837 2837 if (!rstart) rstart=q; 2838 2838 while (r && CDR(r)) r=CDR(r); 2839 CDR(r) =q;2839 CDR(r) = (LispObject *)q; 2840 2840 arg_list=CDR(arg_list); 2841 2841 } -
abuse/trunk/src/lisp/lisp.h
r489 r490 11 11 #define __LISP_HPP_ 12 12 13 #include <cstdlib> 13 14 #include <stdint.h> 14 15 … … 56 57 struct LispList : LispObject 57 58 { 58 void *cdr, *car; 59 size_t GetLength(); 60 61 LispObject *cdr, *car; 59 62 }; 60 63 … … 150 153 }; 151 154 152 static inline void*&CAR(void *x) { return ((LispList *)x)->car; }153 static inline void*&CDR(void *x) { return ((LispList *)x)->cdr; }155 static inline LispObject *&CAR(void *x) { return ((LispList *)x)->car; } 156 static inline LispObject *&CDR(void *x) { return ((LispList *)x)->cdr; } 154 157 static inline ltype item_type(void *x) { if (x) return *(ltype *)x; return L_CONS_CELL; } 155 158 … … 166 169 void *lisp_eq(void *n1, void *n2); 167 170 void *lisp_equal(void *n1, void *n2); 168 long list_length(void *i);169 171 void lprint(void *i); 170 172 void *eval(void *prog); -
abuse/trunk/src/lisp/lisp_gc.cpp
r489 r490 110 110 ((LispRedirect *)old_x)->new_reference = p; 111 111 112 p->car = collect_object(old_car);113 p->cdr = collect_object(old_cdr);114 112 p->car = (LispObject *)collect_object(old_car); 113 p->cdr = (LispObject *)collect_object(old_cdr); 114 115 115 if (last) last->cdr = p; 116 116 else first = p; … … 118 118 } 119 119 if (x) 120 last->cdr = collect_object(x);120 last->cdr = (LispObject *)collect_object(x); 121 121 return first; // we already set the collection pointers 122 122 } … … 209 209 { 210 210 for (; x && item_type(x) == L_CONS_CELL; x = CDR(x)) 211 ((LispList *)x)->car = collect_object(((LispList *)x)->car);211 ((LispList *)x)->car = (LispObject *)collect_object(((LispList *)x)->car); 212 212 if (x) 213 ((LispList *)x)->cdr = collect_object(((LispList *)x)->cdr);213 ((LispList *)x)->cdr = (LispObject *)collect_object(((LispList *)x)->cdr); 214 214 } 215 215 } -
abuse/trunk/src/lisp/lisp_opt.cpp
r489 r490 20 20 21 21 LispObject *l_undefined; 22 LispSymbol *true_symbol = NULL; 22 LispSymbol *true_symbol = NULL, *list_symbol, *string_symbol, *quote_symbol, 23 *backquote_symbol, *comma_symbol, *do_symbol, *in_symbol, *aref_symbol, 24 *if_symbol, *progn_symbol, *car_symbol, *cdr_symbol; 23 25 24 void *list_symbol,*string_symbol, // in lisp_init() 25 *quote_symbol,*backquote_symbol,*comma_symbol,*do_symbol,*in_symbol,*aref_symbol, 26 *colon_initial_contents,*colon_initial_element,*if_symbol, 27 *progn_symbol,*eq_symbol,*zero_symbol,*eq0_symbol,*car_symbol,*cdr_symbol, 28 *load_warning; 29 26 void *colon_initial_contents, *colon_initial_element, 27 *eq_symbol, *zero_symbol, *eq0_symbol, *load_warning; 30 28 31 29 void *if_1progn,*if_2progn,*if_12progn,*not_symbol; -
abuse/trunk/src/lisp/lisp_opt.h
r489 r490 14 14 15 15 extern LispObject *l_undefined; 16 extern LispSymbol *true_symbol; 16 extern LispSymbol *true_symbol, *list_symbol, *string_symbol, *quote_symbol, 17 *backquote_symbol, *comma_symbol, *do_symbol, *in_symbol, *aref_symbol, 18 *if_symbol, *progn_symbol, *car_symbol, *cdr_symbol; 17 19 18 extern void *list_symbol,*string_symbol, // in lisp_init() 19 *quote_symbol,*backquote_symbol,*comma_symbol,*do_symbol,*in_symbol,*aref_symbol, 20 *colon_initial_contents,*colon_initial_element,*if_symbol, 21 *progn_symbol,*car_symbol,*cdr_symbol,*load_warning; 20 extern void *colon_initial_contents, *colon_initial_element, *load_warning; 22 21 23 22 #endif -
abuse/trunk/src/menu.cpp
r489 r490 134 134 args=CAR(CDR(args)); 135 135 136 int options =list_length(args);136 int options = ((LispList *)args)->GetLength(); 137 137 int mh=(font->height()+1)*options+10,maxw=0; 138 138 -
abuse/trunk/src/netcfg.cpp
r481 r490 11 11 12 12 #include "game.h" 13 14 13 15 14 #include "netcfg.h" -
abuse/trunk/src/objects.cpp
r486 r490 391 391 the_game->game_to_mouse(x1,draw_to,v,i,sy1); // calculate sy1 392 392 393 sy1 =max(v->cy1,sy1);394 sy2 =min(v->cy2,sy2);393 sy1 = Max(v->cy1, sy1); 394 sy2 = Min(v->cy2, sy2); 395 395 trans_image *p=picture(); 396 396 … … 517 517 518 518 519 ((LispList *)am)->cdr =frm;520 ((LispList *)frm)->cdr =hx;521 ((LispList *)hx)->cdr =hy;522 ((LispList *)hy)->cdr =px;523 ((LispList *)px)->cdr =py;519 ((LispList *)am)->cdr = (LispObject *)frm; 520 ((LispList *)frm)->cdr = (LispObject *)hx; 521 ((LispList *)hx)->cdr = (LispObject *)hy; 522 ((LispList *)hy)->cdr = (LispObject *)px; 523 ((LispList *)px)->cdr = (LispObject *)py; 524 524 525 525 time_marker *prof1=NULL; … … 1234 1234 1235 1235 1236 ((LispList *)lcx)->cdr =lcy;1237 ((LispList *)lcy)->cdr =lb;1236 ((LispList *)lcx)->cdr = (LispObject *)lcy; 1237 ((LispList *)lcy)->cdr = (LispObject *)lb; 1238 1238 1239 1239 void *m=mark_heap(TMP_SPACE); -
abuse/trunk/src/seq.cpp
r481 r490 40 40 total=1; 41 41 else 42 total =list_length(pict_list);42 total = ((LispList *)pict_list)->GetLength(); 43 43 44 44 seq=(int *) malloc(sizeof(int)*total);
Note: See TracChangeset
for help on using the changeset viewer.