1 #ifndef INCLUDE_ICONS_H
2 #define INCLUDE_ICONS_H
4 #if defined(ICONS_GENERATE) || defined(ICONS_ENABLED)
7 * 1st arg = ICONS_IN_TERM
10 * You can find hex codes for nerd fonts here: https://www.nerdfonts.com/cheat-sheet
13 * You can find a list of emoji here: https://unicode.org/Public/emoji/5.0/emoji-test.txt
15 * Any entry with empty icon gets removed by the hash-table generator
17 #if defined(ICONS_IN_TERM)
18 #define ICON_STR(I, N, E) I
19 #include "icons-in-terminal.h"
21 #define ICON_STR(I, N, E) N
23 #define ICON_STR(I, N, E) E
27 * Define a string to be printed before and after the icon
28 * Adjust if the icons are not printed properly
32 * NOTE: As some emojis take up two cells, all of the emoji icons must
33 * be of width 2. Therefore, right pad single-width emoji with a space.
36 #define ICON_PADDING_RIGHT " "
39 #define ICON_PADDING_RIGHT " "
41 #define ICON_PADDING_LEFT ""
42 #define ICON_PADDING_LEFT_LEN (sizeof ICON_PADDING_LEFT - 1)
43 #define ICON_PADDING_RIGHT_LEN (sizeof ICON_PADDING_RIGHT - 1)
46 #define ICON_ARROW_UP ICON_STR(MD_ARROW_UPWARD, "", "⬆")
47 #define ICON_ARROW_FORWARD ICON_STR(MD_ARROW_FORWARD, "", "➡")
48 #define ICON_ARROW_DOWN ICON_STR(MD_ARROW_DOWNWARD, "", "⬇")
51 #define ICON_DIRECTORY ICON_STR(FA_FOLDER, "", "📂")
52 #define ICON_FILE ICON_STR(FA_FILE, "", "📃")
53 #define ICON_EXEC ICON_STR(FA_COG, "", "⚙️ ")
55 /* Top level and common icons */
56 #define ICON_ARCHIVE ICON_STR(FA_FILE_ARCHIVE_O, "", "📦")
57 #define ICON_BRIEFCASE ICON_STR(FA_BRIEFCASE, "", "💼")
58 #define ICON_C ICON_STR(MFIZZ_C, "", "🇨 ")
59 #define ICON_CHANGELOG ICON_STR(FA_HISTORY, "", "🔺")
60 #define ICON_CHESS ICON_STR("", "", "")
61 #define ICON_CLOJURE ICON_STR(MFIZZ_CLOJURE, "", "")
62 #define ICON_CONFIGURE ICON_STR(FILE_CONFIG, "", "🔧")
63 #define ICON_CPLUSPLUS ICON_STR(MFIZZ_CPLUSPLUS, "", ICON_C)
64 #define ICON_DATABASE ICON_STR(MFIZZ_DATABASE_ALT2, "", "🗃️ ")
65 #define ICON_DESKTOP ICON_STR(FA_DESKTOP, "", "🖥️ ")
66 #define ICON_DOCUMENT ICON_STR(FA_FILE_TEXT_O, "", "🗒 ")
67 #define ICON_DOWNLOADS ICON_STR(FA_DOWNLOAD, "", "📥")
68 #define ICON_ELIXIR ICON_STR(MFIZZ_ELIXIR, "", "💧")
69 #define ICON_ENCRYPT ICON_STR("", "", "🔒")
70 #define ICON_FSHARP ICON_STR(DEV_FSHARP, "", "")
71 #define ICON_FONT ICON_STR(FILE_FONT, "", "")
72 #define ICON_GIT ICON_STR(FA_GIT, "", "🌱")
73 #define ICON_HASKELL ICON_STR("", "", "")
74 #define ICON_HTML ICON_STR(FA_FILE_CODE_O, "", "")
75 #define ICON_JAVA ICON_STR(MFIZZ_JAVA, "", "☕")
76 #define ICON_JAVASCRIPT ICON_STR(FA_FILE_CODE_O, "", "")
77 #define ICON_LICENSE ICON_STR(FA_COPYRIGHT, "", "⚖️ ")
78 #define ICON_LINUX ICON_STR(FA_LINUX, "", "🐧")
79 #define ICON_MAKEFILE ICON_STR(FILE_CMAKE, "", "🛠 ")
80 #define ICON_MANUAL ICON_STR(FILE_MANPAGE, "", "❓")
81 #define ICON_MS_EXCEL ICON_STR(FILE_EXCEL, "", ICON_WORDDOC)
82 #define ICON_MUSIC ICON_STR(FA_MUSIC, "", "🎧")
83 #define ICON_MUSICFILE ICON_STR(FA_FILE_AUDIO_O, "", ICON_MUSIC)
84 #define ICON_OPTICALDISK ICON_STR(LINEA_MUSIC_CD, "", "💿")
85 #define ICON_PDF ICON_STR(FA_FILE_PDF_O, "", "📕")
86 #define ICON_PHOTOSHOP ICON_STR(DEV_PHOTOSHOP, "", ICON_PICTUREFILE)
87 #define ICON_PICTUREFILE ICON_STR(FA_FILE_IMAGE_O, "", ICON_PICTURES)
88 #define ICON_PICTURES ICON_STR(MD_CAMERA_ALT, "", "🎨")
89 #define ICON_PLAYLIST ICON_STR(ICON_MUSICFILE, "", "")
90 #define ICON_POWERPOINT ICON_STR(FILE_POWERPOINT, "", "📊")
91 #define ICON_PUBLIC ICON_STR(FA_INBOX, "", "👀")
92 #define ICON_PYTHON ICON_STR(MFIZZ_PYTHON, "", "🐍")
93 #define ICON_REACT ICON_STR(FILE_JSX, "", ICON_JAVASCRIPT)
94 #define ICON_RUBY ICON_STR(MFIZZ_RUBY, "", "💎")
95 #define ICON_RUST ICON_STR(DEV_RUST, "", "")
96 #define ICON_SASS ICON_STR("", "", "")
97 #define ICON_SCRIPT ICON_STR(MFIZZ_SCRIPT, "", "📜")
98 #define ICON_SUBTITLE ICON_STR(FA_COMMENTS_O, "", "💬")
99 #define ICON_TEMPLATES ICON_STR(FA_PAPERCLIP, "", "📎")
100 #define ICON_TEX ICON_STR(FILE_TEX, "", ICON_DOCUMENT)
101 #define ICON_VIDEOFILE ICON_STR(FA_FILE_MOVIE_O, "", ICON_VIDEOS)
102 #define ICON_VIDEOS ICON_STR(FA_FILM, "", "🎞 ")
103 #define ICON_VIM ICON_STR(DEV_VIM, "", "")
104 #define ICON_WORDDOC ICON_STR(FILE_WORD, "", "📘")
106 #define ICON_EXT_ASM ICON_STR(FILE_NASM, "", "")
107 #define ICON_EXT_BIN ICON_STR(OCT_FILE_BINARY, "", "📓")
108 #define ICON_EXT_COFFEE ICON_STR(MFIZZ_COFFEE_BEAN, "", "")
109 #define ICON_EXT_CSS ICON_STR(MFIZZ_CSS3, "", "🦋")
110 #define ICON_EXT_DEB ICON_STR(MFIZZ_DEBIAN, "", ICON_LINUX)
111 #define ICON_EXT_DIFF ICON_STR(FILE_DIFF, "", "📋")
112 #define ICON_EXT_GO ICON_STR(MFIZZ_GO, "", "")
113 #define ICON_EXT_JSON ICON_STR(ICON_JAVASCRIPT, "", ICON_JAVASCRIPT)
114 #define ICON_EXT_LUA ICON_STR(FILE_LUA, "", "🌘")
115 #define ICON_EXT_M ICON_STR("", "", "📊")
116 #define ICON_EXT_MAT ICON_STR("", "", "")
117 #define ICON_EXT_MD ICON_STR(DEV_MARKDOWN, "", "📝")
118 #define ICON_EXT_MSI ICON_STR(FA_WINDOWS, "", "🪟")
119 #define ICON_EXT_NIX ICON_STR("", "", "")
120 #define ICON_EXT_PATCH ICON_STR(FILE_PATCH, "", "🩹")
121 #define ICON_EXT_PHP ICON_STR(MFIZZ_PHP, "", "🌐")
122 #define ICON_EXT_ROM ICON_STR(FA_LOCK, "", "")
123 #define ICON_EXT_RSS ICON_STR(FA_RSS_SQUARE, "", "📡")
124 #define ICON_EXT_RTF ICON_STR(ICON_PDF, "", ICON_PDF)
125 #define ICON_EXT_SCALA ICON_STR(MFIZZ_SCALA, "", "")
126 #define ICON_EXT_SLN ICON_STR(DEV_VISUALSTUDIO, "", "")
127 #define ICON_EXT_TS ICON_STR(FILE_TS, "", "")
131 * Hex xterm 256 color code, 0 to follow file specific (if any)
132 * Codes: https://jonasjacek.github.io/colors/
133 * Spectrum sorted: https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg
134 * Color names: https://www.ditig.com/256-colors-cheat-sheet
137 COLOR_X(COLOR_VIDEO, 45) /* Turquoise2 */ \
138 COLOR_X(COLOR_VIDEO1, 226) /* Yellow1 */ \
139 COLOR_X(COLOR_AUDIO, 220) /* Gold1 */ \
140 COLOR_X(COLOR_AUDIO1, 205) /* HotPink */ \
141 COLOR_X(COLOR_IMAGE, 82) /* Chartreuse2 */ \
142 COLOR_X(COLOR_DOCS, 202) /* OrangeRed1 */ \
143 COLOR_X(COLOR_ARCHIVE, 209) /* Salmon1 */ \
144 COLOR_X(COLOR_C, 81) /* SteelBlue1 */ \
145 COLOR_X(COLOR_JAVA, 32) /* DeepSkyBlue3 */ \
146 COLOR_X(COLOR_JAVASCRIPT, 47) /* SpringGreen2 */ \
147 COLOR_X(COLOR_REACT, 39) /* DeepSkyBlue1 */ \
148 COLOR_X(COLOR_CSS, 199) /* DeepPink1 */ \
149 COLOR_X(COLOR_PYTHON, 227) /* LightGoldenrod1 */ \
150 COLOR_X(COLOR_LUA, 19) /* Blue3 */ \
151 COLOR_X(COLOR_DOCUMENT, 15) /* White */ \
152 COLOR_X(COLOR_FSHARP, 31) /* DeepSkyBlue3 */ \
153 COLOR_X(COLOR_RUBY, 160) /* Red3 */ \
154 COLOR_X(COLOR_SCALA, 196) /* Red1 */ \
155 COLOR_X(COLOR_SHELL, 47) /* SpringGreen2 */ \
156 COLOR_X(COLOR_VIM, 28) /* Green4 */ \
157 COLOR_X(COLOR_ELIXIR, 104) /* MediumPurple */ \
159 /* X-Macro: https://en.wikipedia.org/wiki/X_Macro */
160 #define COLOR_X(N, V) N = (V),
163 #define COLOR_X(N, V) N,
164 static const unsigned char init_colors[] = { COLOR_LIST };
167 #ifdef ICONS_GENERATE
168 /* temporary struct using `char *`. the hash-table generator will
169 * output a more optimized version which uses `char[]` instead reducing
170 * indirection and the total binary size.
172 struct icon_pair { const char *match; const char *icon; unsigned char color; };
175 struct icon { const char *icon; unsigned char color; };
177 static const struct icon dir_icon = {ICON_DIRECTORY, 0};
178 static const struct icon file_icon = {ICON_FILE, 0};
179 static const struct icon exec_icon = {ICON_EXEC, 0};
181 static const struct icon_pair icons_name[] = {
182 {".git", ICON_GIT, 0},
183 {"Desktop", ICON_DESKTOP, 0},
184 {"Documents", ICON_BRIEFCASE, 0},
185 {"Downloads", ICON_DOWNLOADS, 0},
186 {"Music", ICON_MUSIC, 0},
187 {"Pictures", ICON_PICTURES, 0},
188 {"Public", ICON_PUBLIC, 0},
189 {"Templates", ICON_TEMPLATES, 0},
190 {"Videos", ICON_VIDEOS, 0},
191 {"CHANGELOG", ICON_CHANGELOG, COLOR_DOCS},
192 {"configure", ICON_CONFIGURE, 0},
193 {"License", ICON_LICENSE, COLOR_DOCS},
194 {"Makefile", ICON_MAKEFILE, 0},
197 #ifdef ICONS_GENERATE
199 * The goal here is to provide a small set of default values. We don't try to
200 * provide icons for everything under the sun because keeping a _huge_ table of
201 * icons would: increase binary size, increase memory usage, decrease performance.
203 * Users are free to customize this *locally* as they see fit. Only open a
204 * pull-request if you think your changes are aligned with the goal described
208 static const struct icon_pair icons_ext[] = { /* All entries are case-insensitive */
210 {"1", ICON_MANUAL, COLOR_DOCS},
211 {"7z", ICON_ARCHIVE, COLOR_ARCHIVE},
214 {"a", ICON_MANUAL, 0},
215 {"apk", ICON_ARCHIVE, COLOR_ARCHIVE},
216 {"asm", ICON_EXT_ASM, 0},
217 {"aup", ICON_MUSICFILE, COLOR_AUDIO},
218 {"avi", ICON_VIDEOFILE, COLOR_VIDEO},
221 {"bat", ICON_SCRIPT, 0},
222 {"bib", ICON_TEX, 0},
223 {"bin", ICON_EXT_BIN, 0},
224 {"bmp", ICON_PICTUREFILE, COLOR_IMAGE},
225 {"bz2", ICON_ARCHIVE, COLOR_ARCHIVE},
228 {"c", ICON_C, COLOR_C},
229 {"c++", ICON_CPLUSPLUS, COLOR_C},
230 {"cabal", ICON_HASKELL, COLOR_VIDEO},
231 {"cab", ICON_ARCHIVE, COLOR_ARCHIVE},
232 {"cbr", ICON_ARCHIVE, COLOR_ARCHIVE},
233 {"cbz", ICON_ARCHIVE, COLOR_ARCHIVE},
234 {"cc", ICON_CPLUSPLUS, COLOR_C},
235 {"class", ICON_JAVA, COLOR_JAVA},
236 {"clj", ICON_CLOJURE, 0},
237 {"cljc", ICON_CLOJURE, 0},
238 {"cljs", ICON_CLOJURE, 0},
239 {"cls", ICON_TEX, 0},
240 {"cmake", ICON_MAKEFILE, 0},
241 {"coffee", ICON_EXT_COFFEE, 0},
242 {"conf", ICON_CONFIGURE, 0},
243 {"cpio", ICON_ARCHIVE, COLOR_ARCHIVE},
244 {"cpp", ICON_CPLUSPLUS, COLOR_C},
245 {"css", ICON_EXT_CSS, COLOR_CSS},
246 {"cue", ICON_PLAYLIST, COLOR_AUDIO},
247 {"cvs", ICON_CONFIGURE, 0},
248 {"cxx", ICON_CPLUSPLUS, COLOR_C},
251 {"db", ICON_DATABASE, 0},
252 {"deb", ICON_EXT_DEB, COLOR_ARCHIVE},
253 {"diff", ICON_EXT_DIFF, 0},
254 {"dll", ICON_SCRIPT, 0},
255 {"doc", ICON_WORDDOC, COLOR_DOCUMENT},
256 {"docx", ICON_WORDDOC, COLOR_DOCUMENT},
259 {"ejs", ICON_JAVASCRIPT, COLOR_JAVASCRIPT},
260 {"elf", ICON_LINUX, 0},
261 {"epub", ICON_PDF, COLOR_DOCS},
262 {"exe", ICON_EXEC, 0},
263 {"ex", ICON_ELIXIR, COLOR_ELIXIR},
264 {"eex", ICON_ELIXIR, COLOR_ELIXIR},
265 {"exs", ICON_ELIXIR, COLOR_ELIXIR},
268 {"f#", ICON_FSHARP, COLOR_FSHARP},
269 {"fen", ICON_CHESS, 0},
270 {"flac", ICON_MUSICFILE, COLOR_AUDIO1},
271 {"flv", ICON_VIDEOFILE, COLOR_VIDEO},
272 {"fs", ICON_FSHARP, COLOR_FSHARP},
273 {"fsi", ICON_FSHARP, COLOR_FSHARP},
274 {"fsscript", ICON_FSHARP, COLOR_FSHARP},
275 {"fsx", ICON_FSHARP, COLOR_FSHARP},
278 {"gem", ICON_RUBY, COLOR_RUBY},
279 {"gif", ICON_PICTUREFILE, COLOR_IMAGE},
280 {"go", ICON_EXT_GO, COLOR_C},
281 {"gpg", ICON_ENCRYPT, COLOR_ARCHIVE},
282 {"gz", ICON_ARCHIVE, COLOR_ARCHIVE},
283 {"gzip", ICON_ARCHIVE, COLOR_ARCHIVE},
286 {"h", ICON_C, COLOR_C},
287 {"hh", ICON_CPLUSPLUS, COLOR_C},
288 {"hpp", ICON_CPLUSPLUS, COLOR_C},
289 {"hs", ICON_HASKELL, COLOR_ELIXIR},
290 {"htaccess", ICON_CONFIGURE, 0},
291 {"htpasswd", ICON_CONFIGURE, 0},
292 {"htm", ICON_HTML, 0},
293 {"html", ICON_HTML, 0},
294 {"hxx", ICON_CPLUSPLUS, COLOR_C},
295 {"heex", ICON_ELIXIR, COLOR_ELIXIR},
298 {"ico", ICON_PICTUREFILE, COLOR_IMAGE},
299 {"ini", ICON_CONFIGURE, 0},
300 {"img", ICON_OPTICALDISK, COLOR_ARCHIVE},
301 {"iso", ICON_OPTICALDISK, COLOR_ARCHIVE},
304 {"jar", ICON_JAVA, COLOR_JAVA},
305 {"java", ICON_JAVA, COLOR_JAVA},
306 {"jl", ICON_CONFIGURE, 0},
307 {"jpeg", ICON_PICTUREFILE, COLOR_IMAGE},
308 {"jpg", ICON_PICTUREFILE, COLOR_IMAGE},
309 {"js", ICON_JAVASCRIPT, COLOR_JAVASCRIPT},
310 {"json", ICON_EXT_JSON, COLOR_JAVASCRIPT},
311 {"jsx", ICON_REACT, COLOR_REACT},
312 {"jxl", ICON_PICTUREFILE, COLOR_IMAGE},
315 {"ksh", ICON_SCRIPT, COLOR_SHELL},
318 {"lha", ICON_ARCHIVE, COLOR_ARCHIVE},
319 {"lhs", ICON_HASKELL, COLOR_VIM},
320 {"log", ICON_DOCUMENT, 0},
321 {"lua", ICON_EXT_LUA, COLOR_LUA},
322 {"lzh", ICON_ARCHIVE, COLOR_ARCHIVE},
323 {"lzma", ICON_ARCHIVE, COLOR_ARCHIVE},
326 {"m", ICON_EXT_M, COLOR_C},
327 {"m4a", ICON_MUSICFILE, COLOR_AUDIO},
328 {"m4v", ICON_VIDEOFILE, COLOR_VIDEO},
329 {"markdown", ICON_EXT_MD, COLOR_DOCS},
330 {"mat", ICON_EXT_MAT, COLOR_C},
331 {"md", ICON_EXT_MD, COLOR_DOCS},
332 {"mk", ICON_MAKEFILE, 0},
333 {"mkv", ICON_VIDEOFILE, COLOR_VIDEO},
334 {"mov", ICON_VIDEOFILE, COLOR_VIDEO},
335 {"mp3", ICON_MUSICFILE, COLOR_AUDIO},
336 {"mp4", ICON_VIDEOFILE, COLOR_VIDEO1},
337 {"mpeg", ICON_VIDEOFILE, COLOR_VIDEO},
338 {"mpg", ICON_VIDEOFILE, COLOR_VIDEO},
339 {"msi", ICON_EXT_MSI, 0},
342 {"nix", ICON_EXT_NIX, COLOR_FSHARP},
345 {"o", ICON_MANUAL, 0},
346 {"ogg", ICON_MUSICFILE, COLOR_AUDIO},
347 {"opus", ICON_MUSICFILE, COLOR_AUDIO},
348 {"opdownload", ICON_DOWNLOADS, 0},
349 {"otf", ICON_FONT, 0},
350 {"out", ICON_LINUX, 0},
353 {"part", ICON_DOWNLOADS, 0},
354 {"patch", ICON_EXT_PATCH, 0},
355 {"pdf", ICON_PDF, COLOR_DOCS},
356 {"pgn", ICON_CHESS, 0},
357 {"php", ICON_EXT_PHP, 0},
358 {"png", ICON_PICTUREFILE, COLOR_IMAGE},
359 {"ppt", ICON_POWERPOINT, 0},
360 {"pptx", ICON_POWERPOINT, 0},
361 {"psb", ICON_PHOTOSHOP, 0},
362 {"psd", ICON_PHOTOSHOP, 0},
363 {"py", ICON_PYTHON, COLOR_PYTHON},
364 {"pyc", ICON_PYTHON, COLOR_PYTHON},
365 {"pyd", ICON_PYTHON, COLOR_PYTHON},
366 {"pyo", ICON_PYTHON, COLOR_PYTHON},
371 {"rar", ICON_ARCHIVE, COLOR_ARCHIVE},
372 {"rb", ICON_RUBY, COLOR_RUBY},
373 {"rc", ICON_CONFIGURE, 0},
374 {"rom", ICON_EXT_ROM, 0},
375 {"rpm", ICON_ARCHIVE, COLOR_ARCHIVE},
376 {"rs", ICON_RUST, COLOR_DOCS},
377 {"rss", ICON_EXT_RSS, 0},
378 {"rtf", ICON_EXT_RTF, 0},
381 {"sass", ICON_SASS, COLOR_CSS},
382 {"scss", ICON_SASS, COLOR_CSS},
383 {"so", ICON_MANUAL, 0},
384 {"scala", ICON_EXT_SCALA, COLOR_SCALA},
385 {"sh", ICON_SCRIPT, COLOR_SHELL},
386 {"slim", ICON_SCRIPT, COLOR_DOCUMENT},
387 {"sln", ICON_EXT_SLN, 0},
388 {"sql", ICON_DATABASE, 0},
389 {"srt", ICON_SUBTITLE, 0},
390 {"sty", ICON_TEX, 0},
391 {"sub", ICON_SUBTITLE, 0},
392 {"svg", ICON_PICTUREFILE, COLOR_IMAGE},
395 {"tar", ICON_ARCHIVE, COLOR_ARCHIVE},
396 {"tex", ICON_TEX, 0},
397 {"tgz", ICON_ARCHIVE, COLOR_ARCHIVE},
398 {"ts", ICON_EXT_TS, COLOR_JAVASCRIPT},
399 {"tsx", ICON_REACT, COLOR_REACT},
400 {"txt", ICON_DOCUMENT, COLOR_DOCUMENT},
401 {"txz", ICON_ARCHIVE, COLOR_ARCHIVE},
402 {"ttf", ICON_FONT, 0},
407 {"vid", ICON_VIDEOFILE, COLOR_VIDEO},
408 {"vim", ICON_VIM, COLOR_VIM},
409 {"vimrc", ICON_VIM, COLOR_VIM},
410 {"vtt", ICON_SUBTITLE, 0},
413 {"wav", ICON_MUSICFILE, COLOR_AUDIO},
414 {"webm", ICON_VIDEOFILE, COLOR_VIDEO},
415 {"webp", ICON_PICTUREFILE, COLOR_IMAGE},
416 {"wma", ICON_VIDEOFILE, COLOR_AUDIO},
417 {"wmv", ICON_VIDEOFILE, COLOR_VIDEO},
420 {"xbps", ICON_ARCHIVE, COLOR_ARCHIVE},
421 {"xcf", ICON_PICTUREFILE, COLOR_IMAGE},
422 {"xhtml", ICON_HTML, 0},
423 {"xls", ICON_MS_EXCEL, 0},
424 {"xlsx", ICON_MS_EXCEL, 0},
425 {"xml", ICON_HTML, 0},
426 {"xz", ICON_ARCHIVE, COLOR_ARCHIVE},
429 {"yaml", ICON_CONFIGURE, COLOR_DOCUMENT},
430 {"yml", ICON_CONFIGURE, COLOR_DOCUMENT},
433 {"zip", ICON_ARCHIVE, COLOR_ARCHIVE},
434 {"zsh", ICON_SCRIPT, COLOR_SHELL},
435 {"zst", ICON_ARCHIVE, COLOR_ARCHIVE},
441 #endif /* defined(ICONS_GENERATE) || defined(ICONS_ENABLED) */
443 #endif /* INCLUDE_ICONS_H */