Changeset 7cfe5c0 in mainline for uspace/lib/c
- Timestamp:
- 2012-08-20T19:16:24Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6b99156
- Parents:
- b9cb911 (diff), 01e397ac (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- uspace/lib/c
- Files:
-
- 22 added
- 13 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/Makefile
rb9cb911 r7cfe5c0 62 62 generic/ddi.c \ 63 63 generic/as.c \ 64 generic/bd.c \ 65 generic/bd_srv.c \ 64 66 generic/cap.c \ 65 67 generic/cfg.c \ … … 69 71 generic/device/hw_res_parsed.c \ 70 72 generic/device/char_dev.c \ 73 generic/device/graph_dev.c \ 71 74 generic/device/nic.c \ 72 75 generic/device/pci.c \ … … 92 95 generic/inetping.c \ 93 96 generic/io/asprintf.c \ 97 generic/io/input.c \ 94 98 generic/io/io.c \ 99 generic/io/chargrid.c \ 100 generic/io/output.c \ 95 101 generic/io/printf.c \ 96 102 generic/io/log.c \ … … 101 107 generic/io/printf_core.c \ 102 108 generic/io/console.c \ 109 generic/io/visualizer.c \ 110 generic/io/window.c \ 103 111 generic/iplink.c \ 104 112 generic/iplink_srv.c \ -
uspace/lib/c/generic/async.c
rb9cb911 r7cfe5c0 114 114 #include <stdlib.h> 115 115 #include <macros.h> 116 #include "private/libc.h" 116 117 117 118 … … 2144 2145 int async_share_in_finalize(ipc_callid_t callid, void *src, unsigned int flags) 2145 2146 { 2146 return ipc_share_in_finalize(callid, src, flags); 2147 return ipc_answer_3(callid, EOK, (sysarg_t) src, (sysarg_t) flags, 2148 (sysarg_t) __entry); 2147 2149 } 2148 2150 … … 2211 2213 int async_share_out_finalize(ipc_callid_t callid, void **dst) 2212 2214 { 2213 return ipc_ share_out_finalize(callid,dst);2215 return ipc_answer_2(callid, EOK, (sysarg_t) __entry, (sysarg_t) dst); 2214 2216 } 2215 2217 … … 2295 2297 int async_data_read_finalize(ipc_callid_t callid, const void *src, size_t size) 2296 2298 { 2297 return ipc_ data_read_finalize(callid, src,size);2299 return ipc_answer_2(callid, EOK, (sysarg_t) src, (sysarg_t) size); 2298 2300 } 2299 2301 … … 2398 2400 int async_data_write_finalize(ipc_callid_t callid, void *dst, size_t size) 2399 2401 { 2400 return ipc_ data_write_finalize(callid, dst,size);2402 return ipc_answer_2(callid, EOK, (sysarg_t) dst, (sysarg_t) size); 2401 2403 } 2402 2404 -
uspace/lib/c/generic/io/chargrid.c
rb9cb911 r7cfe5c0 27 27 */ 28 28 29 /** @addtogroup console29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 39 39 #include <bool.h> 40 40 #include <as.h> 41 #include "screenbuffer.h" 42 43 /** Structure for buffering state of one virtual console. 44 * 45 */ 46 struct screenbuffer { 47 size_t size; /**< Structure size */ 48 screenbuffer_flag_t flags; /**< Screenbuffer flags */ 49 50 sysarg_t cols; /**< Number of columns */ 51 sysarg_t rows; /**< Number of rows */ 52 53 sysarg_t col; /**< Current column */ 54 sysarg_t row; /**< Current row */ 55 bool cursor_visible; /**< Cursor visibility */ 56 57 char_attrs_t attrs; /**< Current attributes */ 58 59 sysarg_t top_row; /**< The first row in the cyclic buffer */ 60 charfield_t data[]; /**< Screen contents (cyclic buffer) */ 61 }; 62 63 /** Create a screenbuffer. 41 #include <io/chargrid.h> 42 43 /** Create a chargrid. 64 44 * 65 45 * @param[in] cols Number of columns. 66 46 * @param[in] rows Number of rows. 67 * @param[in] flags Screenbufferflags.68 * 69 * @return New screenbuffer.47 * @param[in] flags Chargrid flags. 48 * 49 * @return New chargrid. 70 50 * @return NULL on failure. 71 51 * 72 52 */ 73 screenbuffer_t *screenbuffer_create(sysarg_t cols, sysarg_t rows,74 screenbuffer_flag_t flags)53 chargrid_t *chargrid_create(sysarg_t cols, sysarg_t rows, 54 chargrid_flag_t flags) 75 55 { 76 56 size_t size = 77 sizeof( screenbuffer_t) + cols * rows * sizeof(charfield_t);78 screenbuffer_t *scrbuf;79 80 if ((flags & SCREENBUFFER_FLAG_SHARED) == SCREENBUFFER_FLAG_SHARED) {81 scrbuf = ( screenbuffer_t *) as_area_create(AS_AREA_ANY, size,57 sizeof(chargrid_t) + cols * rows * sizeof(charfield_t); 58 chargrid_t *scrbuf; 59 60 if ((flags & CHARGRID_FLAG_SHARED) == CHARGRID_FLAG_SHARED) { 61 scrbuf = (chargrid_t *) as_area_create(AS_AREA_ANY, size, 82 62 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); 83 63 if (scrbuf == AS_MAP_FAILED) 84 64 return NULL; 85 65 } else { 86 scrbuf = ( screenbuffer_t *) malloc(size);66 scrbuf = (chargrid_t *) malloc(size); 87 67 if (scrbuf == NULL) 88 68 return NULL; … … 99 79 100 80 scrbuf->top_row = 0; 101 screenbuffer_clear(scrbuf);81 chargrid_clear(scrbuf); 102 82 103 83 return scrbuf; 104 84 } 105 85 106 /** Return keyfield by coordinates 107 * 108 * The back buffer is organized as a cyclic buffer. 109 * Therefore we must take into account the topmost column. 110 * 111 * @param scrbuf Screenbuffer 112 * @param col Column position on screen 113 * @param row Row position on screen 114 * 115 * @return Keyfield structure on (row, col) 116 * 117 */ 118 charfield_t *screenbuffer_field_at(screenbuffer_t *scrbuf, sysarg_t col, 119 sysarg_t row) 120 { 121 return scrbuf->data + 122 ((row + scrbuf->top_row) % scrbuf->rows) * scrbuf->cols + 123 col; 124 } 125 126 bool screenbuffer_cursor_at(screenbuffer_t *scrbuf, sysarg_t col, sysarg_t row) 86 void chargrid_destroy(chargrid_t *srcbuf) 87 { 88 // TODO 89 } 90 91 bool chargrid_cursor_at(chargrid_t *scrbuf, sysarg_t col, sysarg_t row) 127 92 { 128 93 return ((scrbuf->cursor_visible) && (scrbuf->col == col) && … … 130 95 } 131 96 132 sysarg_t screenbuffer_get_top_row(screenbuffer_t *scrbuf)97 sysarg_t chargrid_get_top_row(chargrid_t *scrbuf) 133 98 { 134 99 return scrbuf->top_row; 135 100 } 136 101 137 static sysarg_t screenbuffer_update_rows(screenbuffer_t *scrbuf)102 static sysarg_t chargrid_update_rows(chargrid_t *scrbuf) 138 103 { 139 104 if (scrbuf->row == scrbuf->rows) { 140 105 scrbuf->row = scrbuf->rows - 1; 141 106 scrbuf->top_row = (scrbuf->top_row + 1) % scrbuf->rows; 142 screenbuffer_clear_row(scrbuf, scrbuf->row);107 chargrid_clear_row(scrbuf, scrbuf->row); 143 108 144 109 return scrbuf->rows; … … 148 113 } 149 114 150 static sysarg_t screenbuffer_update_cols(screenbuffer_t *scrbuf)115 static sysarg_t chargrid_update_cols(chargrid_t *scrbuf) 151 116 { 152 117 /* Column overflow */ … … 154 119 scrbuf->col = 0; 155 120 scrbuf->row++; 156 return screenbuffer_update_rows(scrbuf);121 return chargrid_update_rows(scrbuf); 157 122 } 158 123 … … 160 125 } 161 126 162 /** Store one character to screenbuffer.127 /** Store one character to chargrid. 163 128 * 164 129 * Its position is determined by scrbuf->col 165 130 * and scrbuf->row. 166 131 * 167 * @param scrbuf Screenbuffer.132 * @param scrbuf Chargrid. 168 133 * @param ch Character to store. 169 134 * @param update Update coordinates. … … 174 139 * 175 140 */ 176 sysarg_t screenbuffer_putchar(screenbuffer_t *scrbuf, wchar_t ch, bool update)141 sysarg_t chargrid_putchar(chargrid_t *scrbuf, wchar_t ch, bool update) 177 142 { 178 143 assert(scrbuf->col < scrbuf->cols); … … 180 145 181 146 charfield_t *field = 182 screenbuffer_field_at(scrbuf, scrbuf->col, scrbuf->row);147 chargrid_charfield_at(scrbuf, scrbuf->col, scrbuf->row); 183 148 184 149 field->ch = ch; … … 188 153 if (update) { 189 154 scrbuf->col++; 190 return screenbuffer_update_cols(scrbuf);155 return chargrid_update_cols(scrbuf); 191 156 } 192 157 … … 194 159 } 195 160 196 /** Jump to a new row in screenbuffer.197 * 198 * @param scrbuf Screenbuffer.161 /** Jump to a new row in chargrid. 162 * 163 * @param scrbuf Chargrid. 199 164 * 200 165 * @return Number of rows which have been affected. In usual … … 203 168 * 204 169 */ 205 sysarg_t screenbuffer_newline(screenbuffer_t *scrbuf)170 sysarg_t chargrid_newline(chargrid_t *scrbuf) 206 171 { 207 172 assert(scrbuf->col < scrbuf->cols); … … 211 176 scrbuf->row++; 212 177 213 return screenbuffer_update_rows(scrbuf);214 } 215 216 /** Jump to a new row in screenbuffer.217 * 218 * @param scrbuf Screenbuffer.178 return chargrid_update_rows(scrbuf); 179 } 180 181 /** Jump to a new row in chargrid. 182 * 183 * @param scrbuf Chargrid. 219 184 * @param tab_size Tab size. 220 185 * … … 224 189 * 225 190 */ 226 sysarg_t screenbuffer_tabstop(screenbuffer_t *scrbuf, sysarg_t tab_size)191 sysarg_t chargrid_tabstop(chargrid_t *scrbuf, sysarg_t tab_size) 227 192 { 228 193 assert(scrbuf->col < scrbuf->cols); … … 233 198 234 199 for (sysarg_t i = 0; i < spaces; i++) 235 flush += screenbuffer_putchar(scrbuf, ' ', true) - 1;200 flush += chargrid_putchar(scrbuf, ' ', true) - 1; 236 201 237 202 return flush; 238 203 } 239 204 240 /** Jump to the previous character in screenbuffer.205 /** Jump to the previous character in chargrid. 241 206 * 242 207 * Currently no scrollback is supported. 243 208 * 244 * @param scrbuf Screenbuffer.209 * @param scrbuf Chargrid. 245 210 * 246 211 * @return Number of rows which have been affected. In usual … … 250 215 * 251 216 */ 252 sysarg_t screenbuffer_backspace(screenbuffer_t *scrbuf)217 sysarg_t chargrid_backspace(chargrid_t *scrbuf) 253 218 { 254 219 assert(scrbuf->col < scrbuf->cols); … … 262 227 scrbuf->row--; 263 228 264 screenbuffer_putchar(scrbuf, ' ', false);229 chargrid_putchar(scrbuf, ' ', false); 265 230 return 2; 266 231 } 267 232 268 233 scrbuf->col--; 269 screenbuffer_putchar(scrbuf, ' ', false);234 chargrid_putchar(scrbuf, ' ', false); 270 235 return 1; 271 236 } 272 237 273 /** Clear the screenbuffer.274 * 275 * @param scrbuf Screenbuffer.276 * 277 */ 278 void screenbuffer_clear(screenbuffer_t *scrbuf)238 /** Clear the chargrid. 239 * 240 * @param scrbuf Chargrid. 241 * 242 */ 243 void chargrid_clear(chargrid_t *scrbuf) 279 244 { 280 245 for (size_t pos = 0; pos < (scrbuf->cols * scrbuf->rows); pos++) { … … 288 253 } 289 254 290 /** Update current screenbuffercoordinates291 * 292 * @param scrbuf Screenbuffer.255 /** Update current chargrid coordinates 256 * 257 * @param scrbuf Chargrid. 293 258 * @param col New column. 294 259 * @param row New row. 295 260 * 296 261 */ 297 void screenbuffer_set_cursor(screenbuffer_t *scrbuf, sysarg_t col, sysarg_t row)262 void chargrid_set_cursor(chargrid_t *scrbuf, sysarg_t col, sysarg_t row) 298 263 { 299 264 scrbuf->col = col; … … 301 266 } 302 267 303 void screenbuffer_set_cursor_visibility(screenbuffer_t *scrbuf, bool visible)268 void chargrid_set_cursor_visibility(chargrid_t *scrbuf, bool visible) 304 269 { 305 270 scrbuf->cursor_visible = visible; 306 271 } 307 272 308 /** Get current screenbuffercoordinates309 * 310 * @param scrbuf Screenbuffer.273 /** Get current chargrid coordinates 274 * 275 * @param scrbuf Chargrid. 311 276 * @param col Column. 312 277 * @param row Row. 313 278 * 314 279 */ 315 void screenbuffer_get_cursor(screenbuffer_t *scrbuf, sysarg_t *col,280 void chargrid_get_cursor(chargrid_t *scrbuf, sysarg_t *col, 316 281 sysarg_t *row) 317 282 { … … 323 288 } 324 289 325 bool screenbuffer_get_cursor_visibility(screenbuffer_t *scrbuf)290 bool chargrid_get_cursor_visibility(chargrid_t *scrbuf) 326 291 { 327 292 return scrbuf->cursor_visible; … … 330 295 /** Clear one buffer row. 331 296 * 332 * @param scrbuf Screenbuffer.297 * @param scrbuf Chargrid. 333 298 * @param row Row to clear. 334 299 * 335 300 */ 336 void screenbuffer_clear_row(screenbuffer_t *scrbuf, sysarg_t row)301 void chargrid_clear_row(chargrid_t *scrbuf, sysarg_t row) 337 302 { 338 303 for (sysarg_t col = 0; col < scrbuf->cols; col++) { 339 304 charfield_t *field = 340 screenbuffer_field_at(scrbuf, col, row);305 chargrid_charfield_at(scrbuf, col, row); 341 306 342 307 field->ch = 0; … … 346 311 } 347 312 348 /** Set screenbufferstyle.349 * 350 * @param scrbuf Screenbuffer.313 /** Set chargrid style. 314 * 315 * @param scrbuf Chargrid. 351 316 * @param style Style. 352 317 * 353 318 */ 354 void screenbuffer_set_style(screenbuffer_t *scrbuf, console_style_t style)319 void chargrid_set_style(chargrid_t *scrbuf, console_style_t style) 355 320 { 356 321 scrbuf->attrs.type = CHAR_ATTR_STYLE; … … 358 323 } 359 324 360 /** Set screenbuffercolor.361 * 362 * @param scrbuf Screenbuffer.325 /** Set chargrid color. 326 * 327 * @param scrbuf Chargrid. 363 328 * @param bgcolor Background color. 364 329 * @param fgcolor Foreground color. … … 366 331 * 367 332 */ 368 void screenbuffer_set_color(screenbuffer_t *scrbuf, console_color_t bgcolor,333 void chargrid_set_color(chargrid_t *scrbuf, console_color_t bgcolor, 369 334 console_color_t fgcolor, console_color_attr_t attr) 370 335 { … … 375 340 } 376 341 377 /** Set screenbufferRGB color.378 * 379 * @param scrbuf Screenbuffer.342 /** Set chargrid RGB color. 343 * 344 * @param scrbuf Chargrid. 380 345 * @param bgcolor Background color. 381 346 * @param fgcolor Foreground color. 382 347 * 383 348 */ 384 void screenbuffer_set_rgb_color(screenbuffer_t *scrbuf, pixel_t bgcolor,349 void chargrid_set_rgb_color(chargrid_t *scrbuf, pixel_t bgcolor, 385 350 pixel_t fgcolor) 386 351 { -
uspace/lib/c/generic/ipc.c
rb9cb911 r7cfe5c0 48 48 #include <fibril.h> 49 49 #include <macros.h> 50 #include "private/libc.h"51 50 52 51 /** … … 83 82 84 83 static atomic_t ipc_futex = FUTEX_INITIALIZER; 85 86 /** Fast synchronous call.87 *88 * Only three payload arguments can be passed using this function. However,89 * this function is faster than the generic ipc_call_sync_slow() because90 * the payload is passed directly in registers.91 *92 * @param phoneid Phone handle for the call.93 * @param method Requested method.94 * @param arg1 Service-defined payload argument.95 * @param arg2 Service-defined payload argument.96 * @param arg3 Service-defined payload argument.97 * @param result1 If non-NULL, the return ARG1 will be stored there.98 * @param result2 If non-NULL, the return ARG2 will be stored there.99 * @param result3 If non-NULL, the return ARG3 will be stored there.100 * @param result4 If non-NULL, the return ARG4 will be stored there.101 * @param result5 If non-NULL, the return ARG5 will be stored there.102 *103 * @return Negative values representing IPC errors.104 * @return Otherwise the RETVAL of the answer.105 *106 */107 int ipc_call_sync_fast(int phoneid, sysarg_t method, sysarg_t arg1,108 sysarg_t arg2, sysarg_t arg3, sysarg_t *result1, sysarg_t *result2,109 sysarg_t *result3, sysarg_t *result4, sysarg_t *result5)110 {111 ipc_call_t resdata;112 int callres = __SYSCALL6(SYS_IPC_CALL_SYNC_FAST, phoneid, method, arg1,113 arg2, arg3, (sysarg_t) &resdata);114 if (callres)115 return callres;116 117 if (result1)118 *result1 = IPC_GET_ARG1(resdata);119 if (result2)120 *result2 = IPC_GET_ARG2(resdata);121 if (result3)122 *result3 = IPC_GET_ARG3(resdata);123 if (result4)124 *result4 = IPC_GET_ARG4(resdata);125 if (result5)126 *result5 = IPC_GET_ARG5(resdata);127 128 return IPC_GET_RETVAL(resdata);129 }130 131 /** Synchronous call transmitting 5 arguments of payload.132 *133 * @param phoneid Phone handle for the call.134 * @param imethod Requested interface and method.135 * @param arg1 Service-defined payload argument.136 * @param arg2 Service-defined payload argument.137 * @param arg3 Service-defined payload argument.138 * @param arg4 Service-defined payload argument.139 * @param arg5 Service-defined payload argument.140 * @param result1 If non-NULL, storage for the first return argument.141 * @param result2 If non-NULL, storage for the second return argument.142 * @param result3 If non-NULL, storage for the third return argument.143 * @param result4 If non-NULL, storage for the fourth return argument.144 * @param result5 If non-NULL, storage for the fifth return argument.145 *146 * @return Negative values representing IPC errors.147 * @return Otherwise the RETVAL of the answer.148 *149 */150 int ipc_call_sync_slow(int phoneid, sysarg_t imethod, sysarg_t arg1,151 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5,152 sysarg_t *result1, sysarg_t *result2, sysarg_t *result3, sysarg_t *result4,153 sysarg_t *result5)154 {155 ipc_call_t data;156 157 IPC_SET_IMETHOD(data, imethod);158 IPC_SET_ARG1(data, arg1);159 IPC_SET_ARG2(data, arg2);160 IPC_SET_ARG3(data, arg3);161 IPC_SET_ARG4(data, arg4);162 IPC_SET_ARG5(data, arg5);163 164 int callres = __SYSCALL3(SYS_IPC_CALL_SYNC_SLOW, phoneid,165 (sysarg_t) &data, (sysarg_t) &data);166 if (callres)167 return callres;168 169 if (result1)170 *result1 = IPC_GET_ARG1(data);171 if (result2)172 *result2 = IPC_GET_ARG2(data);173 if (result3)174 *result3 = IPC_GET_ARG3(data);175 if (result4)176 *result4 = IPC_GET_ARG4(data);177 if (result5)178 *result5 = IPC_GET_ARG5(data);179 180 return IPC_GET_RETVAL(data);181 }182 84 183 85 /** Send asynchronous message via syscall. … … 611 513 } 612 514 613 /** Request callback connection.614 *615 * The @a task_id and @a phonehash identifiers returned616 * by the kernel can be used for connection tracking.617 *618 * @param phoneid Phone handle used for contacting the other side.619 * @param arg1 User defined argument.620 * @param arg2 User defined argument.621 * @param arg3 User defined argument.622 * @param task_id Identifier of the client task.623 * @param phonehash Opaque identifier of the phone that will624 * be used for incoming calls.625 *626 * @return Zero on success or a negative error code.627 *628 */629 int ipc_connect_to_me(int phoneid, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3,630 task_id_t *task_id, sysarg_t *phonehash)631 {632 ipc_call_t data;633 int rc = __SYSCALL6(SYS_IPC_CALL_SYNC_FAST, phoneid,634 IPC_M_CONNECT_TO_ME, arg1, arg2, arg3, (sysarg_t) &data);635 if (rc == EOK) {636 *task_id = data.in_task_id;637 *phonehash = IPC_GET_ARG5(data);638 }639 return rc;640 }641 642 /** Request cloned connection.643 *644 * @param phoneid Phone handle used for contacting the other side.645 *646 * @return Cloned phone handle on success or a negative error code.647 *648 */649 int ipc_clone_establish(int phoneid)650 {651 sysarg_t newphid;652 int res = ipc_call_sync_0_5(phoneid, IPC_M_CLONE_ESTABLISH, NULL,653 NULL, NULL, NULL, &newphid);654 if (res)655 return res;656 657 return newphid;658 }659 660 /** Request new connection.661 *662 * @param phoneid Phone handle used for contacting the other side.663 * @param arg1 User defined argument.664 * @param arg2 User defined argument.665 * @param arg3 User defined argument.666 *667 * @return New phone handle on success or a negative error code.668 *669 */670 int ipc_connect_me_to(int phoneid, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3)671 {672 sysarg_t newphid;673 int res = ipc_call_sync_3_5(phoneid, IPC_M_CONNECT_ME_TO, arg1, arg2, arg3,674 NULL, NULL, NULL, NULL, &newphid);675 if (res)676 return res;677 678 return newphid;679 }680 681 /** Request new connection (blocking)682 *683 * If the connection is not available at the moment, the684 * call should block. This has to be, however, implemented685 * on the server side.686 *687 * @param phoneid Phone handle used for contacting the other side.688 * @param arg1 User defined argument.689 * @param arg2 User defined argument.690 * @param arg3 User defined argument.691 *692 * @return New phone handle on success or a negative error code.693 *694 */695 int ipc_connect_me_to_blocking(int phoneid, sysarg_t arg1, sysarg_t arg2,696 sysarg_t arg3)697 {698 sysarg_t newphid;699 int res = ipc_call_sync_4_5(phoneid, IPC_M_CONNECT_ME_TO, arg1, arg2, arg3,700 IPC_FLAG_BLOCKING, NULL, NULL, NULL, NULL, &newphid);701 if (res)702 return res;703 704 return newphid;705 }706 707 515 /** Hang up a phone. 708 516 * … … 758 566 } 759 567 760 /** Wrapper for IPC_M_SHARE_IN calls.761 *762 * @param phoneid Phone that will be used to contact the receiving side.763 * @param size Size of the destination address space area.764 * @param arg User defined argument.765 * @param flags Storage for received flags. Can be NULL.766 * @param dst Destination address space area base. Cannot be NULL.767 *768 * @return Zero on success or a negative error code from errno.h.769 *770 */771 int ipc_share_in_start(int phoneid, size_t size, sysarg_t arg,772 unsigned int *flags, void **dst)773 {774 sysarg_t _flags = 0;775 sysarg_t _dst = (sysarg_t) -1;776 int res = ipc_call_sync_2_4(phoneid, IPC_M_SHARE_IN, (sysarg_t) size,777 arg, NULL, &_flags, NULL, &_dst);778 779 if (flags)780 *flags = (unsigned int) _flags;781 782 *dst = (void *) _dst;783 return res;784 }785 786 /** Wrapper for answering the IPC_M_SHARE_IN calls.787 *788 * This wrapper only makes it more comfortable to answer IPC_M_SHARE_IN789 * calls so that the user doesn't have to remember the meaning of each790 * IPC argument.791 *792 * @param callid Hash of the IPC_M_DATA_READ call to answer.793 * @param src Source address space base.794 * @param flags Flags to be used for sharing. Bits can be only cleared.795 *796 * @return Zero on success or a value from @ref errno.h on failure.797 *798 */799 int ipc_share_in_finalize(ipc_callid_t callid, void *src, unsigned int flags)800 {801 return ipc_answer_3(callid, EOK, (sysarg_t) src, (sysarg_t) flags,802 (sysarg_t) __entry);803 }804 805 /** Wrapper for IPC_M_SHARE_OUT calls.806 *807 * @param phoneid Phone that will be used to contact the receiving side.808 * @param src Source address space area base address.809 * @param flags Flags to be used for sharing. Bits can be only cleared.810 *811 * @return Zero on success or a negative error code from errno.h.812 *813 */814 int ipc_share_out_start(int phoneid, void *src, unsigned int flags)815 {816 return ipc_call_sync_3_0(phoneid, IPC_M_SHARE_OUT, (sysarg_t) src, 0,817 (sysarg_t) flags);818 }819 820 /** Wrapper for answering the IPC_M_SHARE_OUT calls.821 *822 * This wrapper only makes it more comfortable to answer IPC_M_SHARE_OUT823 * calls so that the user doesn't have to remember the meaning of each824 * IPC argument.825 *826 * @param callid Hash of the IPC_M_DATA_WRITE call to answer.827 * @param dst Destination address space area base address.828 *829 * @return Zero on success or a value from @ref errno.h on failure.830 *831 */832 int ipc_share_out_finalize(ipc_callid_t callid, void **dst)833 {834 return ipc_answer_2(callid, EOK, (sysarg_t) __entry, (sysarg_t) dst);835 }836 837 /** Wrapper for IPC_M_DATA_READ calls.838 *839 * @param phoneid Phone that will be used to contact the receiving side.840 * @param dst Address of the beginning of the destination buffer.841 * @param size Size of the destination buffer.842 *843 * @return Zero on success or a negative error code from errno.h.844 *845 */846 int ipc_data_read_start(int phoneid, void *dst, size_t size)847 {848 return ipc_call_sync_2_0(phoneid, IPC_M_DATA_READ, (sysarg_t) dst,849 (sysarg_t) size);850 }851 852 /** Wrapper for answering the IPC_M_DATA_READ calls.853 *854 * This wrapper only makes it more comfortable to answer IPC_M_DATA_READ855 * calls so that the user doesn't have to remember the meaning of each856 * IPC argument.857 *858 * @param callid Hash of the IPC_M_DATA_READ call to answer.859 * @param src Source address for the IPC_M_DATA_READ call.860 * @param size Size for the IPC_M_DATA_READ call. Can be smaller than861 * the maximum size announced by the sender.862 *863 * @return Zero on success or a value from @ref errno.h on failure.864 *865 */866 int ipc_data_read_finalize(ipc_callid_t callid, const void *src, size_t size)867 {868 return ipc_answer_2(callid, EOK, (sysarg_t) src, (sysarg_t) size);869 }870 871 /** Wrapper for IPC_M_DATA_WRITE calls.872 *873 * @param phoneid Phone that will be used to contact the receiving side.874 * @param src Address of the beginning of the source buffer.875 * @param size Size of the source buffer.876 *877 * @return Zero on success or a negative error code from errno.h.878 *879 */880 int ipc_data_write_start(int phoneid, const void *src, size_t size)881 {882 return ipc_call_sync_2_0(phoneid, IPC_M_DATA_WRITE, (sysarg_t) src,883 (sysarg_t) size);884 }885 886 /** Wrapper for answering the IPC_M_DATA_WRITE calls.887 *888 * This wrapper only makes it more comfortable to answer IPC_M_DATA_WRITE889 * calls so that the user doesn't have to remember the meaning of each890 * IPC argument.891 *892 * @param callid Hash of the IPC_M_DATA_WRITE call to answer.893 * @param dst Final destination address for the IPC_M_DATA_WRITE call.894 * @param size Final size for the IPC_M_DATA_WRITE call.895 *896 * @return Zero on success or a value from @ref errno.h on failure.897 *898 */899 int ipc_data_write_finalize(ipc_callid_t callid, void *dst, size_t size)900 {901 return ipc_answer_2(callid, EOK, (sysarg_t) dst, (sysarg_t) size);902 }903 904 568 /** Connect to a task specified by id. 905 569 * -
uspace/lib/c/generic/iplink_srv.c
rb9cb911 r7cfe5c0 139 139 if (!method) { 140 140 /* The other side has hung up */ 141 fibril_mutex_lock(&srv->lock); 142 srv->connected = false; 143 fibril_mutex_unlock(&srv->lock); 141 144 async_answer_0(callid, EOK); 142 145 break; -
uspace/lib/c/generic/str.c
rb9cb911 r7cfe5c0 136 136 } 137 137 138 /** Decode a single character from a string to the left. 139 * 140 * Decode a single character from a string of size @a size. Decoding starts 141 * at @a offset and this offset is moved to the beginning of the previous 142 * character. In case of decoding error, offset generally decreases at least 143 * by one. However, offset is never moved before 0. 144 * 145 * @param str String (not necessarily NULL-terminated). 146 * @param offset Byte offset in string where to start decoding. 147 * @param size Size of the string (in bytes). 148 * 149 * @return Value of decoded character, U_SPECIAL on decoding error or 150 * NULL if attempt to decode beyond @a start of str. 151 * 152 */ 153 wchar_t str_decode_reverse(const char *str, size_t *offset, size_t size) 154 { 155 if (*offset == 0) 156 return 0; 157 158 size_t processed = 0; 159 /* Continue while continuation bytes found */ 160 while (*offset > 0 && processed < 4) { 161 uint8_t b = (uint8_t) str[--(*offset)]; 162 163 if (processed == 0 && (b & 0x80) == 0) { 164 /* 0xxxxxxx (Plain ASCII) */ 165 return b & 0x7f; 166 } 167 else if ((b & 0xe0) == 0xc0 || (b & 0xf0) == 0xe0 || 168 (b & 0xf8) == 0xf0) { 169 /* Start byte */ 170 size_t start_offset = *offset; 171 return str_decode(str, &start_offset, size); 172 } 173 else if ((b & 0xc0) != 0x80) { 174 /* Not a continuation byte */ 175 return U_SPECIAL; 176 } 177 processed++; 178 } 179 /* Too many continuation bytes */ 180 return U_SPECIAL; 181 } 182 138 183 /** Encode a single character to string representation. 139 184 * … … 397 442 398 443 return len; 444 } 445 446 /** Get character display width on a character cell display. 447 * 448 * @param ch Character 449 * @return Width of character in cells. 450 */ 451 size_t chr_width(wchar_t ch) 452 { 453 return 1; 454 } 455 456 /** Get string display width on a character cell display. 457 * 458 * @param str String 459 * @return Width of string in cells. 460 */ 461 size_t str_width(const char *str) 462 { 463 size_t width = 0; 464 size_t offset = 0; 465 wchar_t ch; 466 467 while ((ch = str_decode(str, &offset, STR_NO_LIMIT)) != 0) 468 width += chr_width(ch); 469 470 return width; 399 471 } 400 472 -
uspace/lib/c/generic/task.c
rb9cb911 r7cfe5c0 201 201 * 202 202 * This is really just a convenience wrapper over the more complicated 203 * loader API. Arguments are passed in a va_list. 204 * 205 * @param id If not NULL, the ID of the task is stored here on success. 206 * @param path Pathname of the binary to execute. 207 * @param cnt Number of arguments. 208 * @param ap Command-line arguments. 209 * 210 * @return Zero on success or negative error code. 211 * 212 */ 213 int task_spawn(task_id_t *task_id, const char *path, int cnt, va_list ap) 214 { 215 /* Allocate argument list. */ 216 const char **arglist = malloc(cnt * sizeof(const char *)); 217 if (arglist == NULL) 218 return ENOMEM; 219 220 /* Fill in arguments. */ 221 const char *arg; 222 cnt = 0; 223 do { 224 arg = va_arg(ap, const char *); 225 arglist[cnt++] = arg; 226 } while (arg != NULL); 227 228 /* Spawn task. */ 229 int rc = task_spawnv(task_id, path, arglist); 230 231 /* Free argument list. */ 232 free(arglist); 233 return rc; 234 } 235 236 /** Create a new task by running an executable from the filesystem. 237 * 238 * This is really just a convenience wrapper over the more complicated 203 239 * loader API. Arguments are passed as a null-terminated list of arguments. 204 240 * … … 216 252 va_list ap; 217 253 const char *arg; 218 const char **arglist;219 254 int cnt = 0; 220 255 … … 226 261 va_end(ap); 227 262 228 /* Allocate argument list. */229 arglist = malloc(cnt * sizeof(const char *));230 if (arglist == NULL)231 return ENOMEM;232 233 /* Fill in arguments. */234 cnt = 0;235 263 va_start(ap, path); 236 do { 237 arg = va_arg(ap, const char *); 238 arglist[cnt++] = arg; 239 } while (arg != NULL); 264 int rc = task_spawn(task_id, path, cnt, ap); 240 265 va_end(ap); 241 266 242 /* Spawn task. */243 int rc = task_spawnv(task_id, path, arglist);244 245 /* Free argument list. */246 free(arglist);247 267 return rc; 248 268 } -
uspace/lib/c/include/io/charfield.h
rb9cb911 r7cfe5c0 1 1 /* 2 2 * Copyright (c) 2006 Josef Cejka 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 33 34 */ 34 35 35 #ifndef IMGMAP_SCREENBUFFER_H__36 #define IMGMAP_SCREENBUFFER_H__36 #ifndef LIBC_IO_CHARFIELD_H_ 37 #define LIBC_IO_CHARFIELD_H_ 37 38 38 39 #include <sys/types.h> … … 40 41 #include <io/color.h> 41 42 #include <io/style.h> 42 #include "fb.h"43 #include <io/pixel.h> 43 44 44 45 typedef enum { 45 SCREENBUFFER_FLAG_NONE = 0,46 SCREENBUFFER_FLAG_SHARED= 147 } screenbuffer_flag_t;46 CHAR_FLAG_NONE = 0, 47 CHAR_FLAG_DIRTY = 1 48 } char_flags_t; 48 49 49 50 typedef enum { … … 52 53 CHAR_ATTR_RGB 53 54 } char_attr_type_t; 54 55 typedef enum {56 CHAR_FLAG_NONE = 0,57 CHAR_FLAG_DIRTY = 158 } char_flags_t;59 55 60 56 typedef struct { … … 65 61 66 62 typedef struct { 67 pixel_t bgcolor; /**< Background color */68 pixel_t fgcolor; /**< Foreground color */63 pixel_t bgcolor; 64 pixel_t fgcolor; 69 65 } char_attr_rgb_t; 70 66 … … 80 76 } char_attrs_t; 81 77 82 /** One field on screen. It contain one character and its attributes. */83 78 typedef struct { 84 wchar_t ch; /**< Character itself */85 char_attrs_t attrs; /**< Character attributes */86 char_flags_t flags; /**< Character flags */79 wchar_t ch; 80 char_attrs_t attrs; 81 char_flags_t flags; 87 82 } charfield_t; 88 83 89 /** Compare two sets of attributes.90 *91 * @param a1 First attribute.92 * @param a2 Second attribute.93 *94 * @return True on equality95 *96 */97 84 static inline bool attrs_same(char_attrs_t a1, char_attrs_t a2) 98 85 { … … 115 102 } 116 103 117 extern screenbuffer_t *screenbuffer_create(sysarg_t, sysarg_t,118 screenbuffer_flag_t);119 120 extern charfield_t *screenbuffer_field_at(screenbuffer_t *, sysarg_t, sysarg_t);121 extern bool screenbuffer_cursor_at(screenbuffer_t *, sysarg_t, sysarg_t);122 123 extern sysarg_t screenbuffer_get_top_row(screenbuffer_t *);124 125 extern sysarg_t screenbuffer_putchar(screenbuffer_t *, wchar_t, bool);126 extern sysarg_t screenbuffer_newline(screenbuffer_t *);127 extern sysarg_t screenbuffer_tabstop(screenbuffer_t *, sysarg_t);128 extern sysarg_t screenbuffer_backspace(screenbuffer_t *);129 130 extern void screenbuffer_clear(screenbuffer_t *);131 extern void screenbuffer_clear_row(screenbuffer_t *, sysarg_t);132 133 extern void screenbuffer_set_cursor(screenbuffer_t *, sysarg_t, sysarg_t);134 extern void screenbuffer_set_cursor_visibility(screenbuffer_t *, bool);135 extern bool screenbuffer_get_cursor_visibility(screenbuffer_t *);136 137 extern void screenbuffer_get_cursor(screenbuffer_t *, sysarg_t *, sysarg_t *);138 139 extern void screenbuffer_set_style(screenbuffer_t *, console_style_t);140 extern void screenbuffer_set_color(screenbuffer_t *, console_color_t,141 console_color_t, console_color_attr_t);142 extern void screenbuffer_set_rgb_color(screenbuffer_t *, pixel_t, pixel_t);143 144 104 #endif 145 105 -
uspace/lib/c/include/io/console.h
rb9cb911 r7cfe5c0 37 37 38 38 #include <sys/time.h> 39 #include <io/kbd_event.h> 39 40 #include <io/keycode.h> 40 41 #include <async.h> … … 70 71 } console_ctrl_t; 71 72 72 typedef enum {73 KEY_PRESS,74 KEY_RELEASE75 } kbd_event_type_t;76 77 /** Console event structure. */78 typedef struct {79 /** List handle */80 link_t link;81 82 /** Press or release event. */83 kbd_event_type_t type;84 85 /** Keycode of the key that was pressed or released. */86 keycode_t key;87 88 /** Bitmask of modifiers held. */89 keymod_t mods;90 91 /** The character that was generated or '\0' for none. */92 wchar_t c;93 } kbd_event_t;94 95 73 extern console_ctrl_t *console_init(FILE *, FILE *); 96 74 extern void console_done(console_ctrl_t *); -
uspace/lib/c/include/ipc/dev_iface.h
rb9cb911 r7cfe5c0 38 38 /** Character device interface */ 39 39 CHAR_DEV_IFACE, 40 41 /** Graphic device interface */ 42 GRAPH_DEV_IFACE, 40 43 41 44 /** Network interface controller interface */ -
uspace/lib/c/include/ipc/input.h
rb9cb911 r7cfe5c0 46 46 INPUT_EVENT_KEY = IPC_FIRST_USER_METHOD, 47 47 INPUT_EVENT_MOVE, 48 INPUT_EVENT_ABS_MOVE, 48 49 INPUT_EVENT_BUTTON 49 50 } input_notif_t; -
uspace/lib/c/include/ipc/ipc.h
rb9cb911 r7cfe5c0 47 47 48 48 typedef void (*ipc_async_callback_t)(void *, int, ipc_call_t *); 49 50 /*51 * User-friendly wrappers for ipc_call_sync_fast() and ipc_call_sync_slow().52 * They are in the form ipc_call_sync_m_n(), where m denotes the number of53 * arguments of payload and n denotes number of return values. Whenever54 * possible, the fast version is used.55 */56 57 #define ipc_call_sync_0_0(phoneid, method) \58 ipc_call_sync_fast((phoneid), (method), 0, 0, 0, 0, 0, 0, 0, 0)59 #define ipc_call_sync_0_1(phoneid, method, res1) \60 ipc_call_sync_fast((phoneid), (method), 0, 0, 0, (res1), 0, 0, 0, 0)61 #define ipc_call_sync_0_2(phoneid, method, res1, res2) \62 ipc_call_sync_fast((phoneid), (method), 0, 0, 0, (res1), (res2), 0, 0, 0)63 #define ipc_call_sync_0_3(phoneid, method, res1, res2, res3) \64 ipc_call_sync_fast((phoneid), (method), 0, 0, 0, (res1), (res2), (res3), \65 0, 0)66 #define ipc_call_sync_0_4(phoneid, method, res1, res2, res3, res4) \67 ipc_call_sync_fast((phoneid), (method), 0, 0, 0, (res1), (res2), (res3), \68 (res4), 0)69 #define ipc_call_sync_0_5(phoneid, method, res1, res2, res3, res4, res5) \70 ipc_call_sync_fast((phoneid), (method), 0, 0, 0, (res1), (res2), (res3), \71 (res4), (res5))72 73 #define ipc_call_sync_1_0(phoneid, method, arg1) \74 ipc_call_sync_fast((phoneid), (method), (arg1), 0, 0, 0, 0, 0, 0, 0)75 #define ipc_call_sync_1_1(phoneid, method, arg1, res1) \76 ipc_call_sync_fast((phoneid), (method), (arg1), 0, 0, (res1), 0, 0, 0, 0)77 #define ipc_call_sync_1_2(phoneid, method, arg1, res1, res2) \78 ipc_call_sync_fast((phoneid), (method), (arg1), 0, 0, (res1), (res2), 0, \79 0, 0)80 #define ipc_call_sync_1_3(phoneid, method, arg1, res1, res2, res3) \81 ipc_call_sync_fast((phoneid), (method), (arg1), 0, 0, (res1), (res2), \82 (res3), 0, 0)83 #define ipc_call_sync_1_4(phoneid, method, arg1, res1, res2, res3, res4) \84 ipc_call_sync_fast((phoneid), (method), (arg1), 0, 0, (res1), (res2), \85 (res3), (res4), 0)86 #define ipc_call_sync_1_5(phoneid, method, arg1, res1, res2, res3, res4, \87 res5) \88 ipc_call_sync_fast((phoneid), (method), (arg1), 0, 0, (res1), (res2), \89 (res3), (res4), (res5))90 91 #define ipc_call_sync_2_0(phoneid, method, arg1, arg2) \92 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), 0, 0, 0, 0, \93 0, 0)94 #define ipc_call_sync_2_1(phoneid, method, arg1, arg2, res1) \95 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), 0, (res1), 0, 0, \96 0, 0)97 #define ipc_call_sync_2_2(phoneid, method, arg1, arg2, res1, res2) \98 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), 0, (res1), \99 (res2), 0, 0, 0)100 #define ipc_call_sync_2_3(phoneid, method, arg1, arg2, res1, res2, res3) \101 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), 0, (res1), \102 (res2), (res3), 0, 0)103 #define ipc_call_sync_2_4(phoneid, method, arg1, arg2, res1, res2, res3, \104 res4) \105 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), 0, (res1), \106 (res2), (res3), (res4), 0)107 #define ipc_call_sync_2_5(phoneid, method, arg1, arg2, res1, res2, res3, \108 res4, res5)\109 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), 0, (res1), \110 (res2), (res3), (res4), (res5))111 112 #define ipc_call_sync_3_0(phoneid, method, arg1, arg2, arg3) \113 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, 0, 0, \114 0, 0)115 #define ipc_call_sync_3_1(phoneid, method, arg1, arg2, arg3, res1) \116 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), (arg3), (res1), \117 0, 0, 0, 0)118 #define ipc_call_sync_3_2(phoneid, method, arg1, arg2, arg3, res1, res2) \119 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), (arg3), (res1), \120 (res2), 0, 0, 0)121 #define ipc_call_sync_3_3(phoneid, method, arg1, arg2, arg3, res1, res2, \122 res3) \123 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), (arg3), \124 (res1), (res2), (res3), 0, 0)125 #define ipc_call_sync_3_4(phoneid, method, arg1, arg2, arg3, res1, res2, \126 res3, res4) \127 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), (arg3), \128 (res1), (res2), (res3), (res4), 0)129 #define ipc_call_sync_3_5(phoneid, method, arg1, arg2, arg3, res1, res2, \130 res3, res4, res5) \131 ipc_call_sync_fast((phoneid), (method), (arg1), (arg2), (arg3), \132 (res1), (res2), (res3), (res4), (res5))133 134 #define ipc_call_sync_4_0(phoneid, method, arg1, arg2, arg3, arg4) \135 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), 0, \136 0, 0, 0, 0, 0)137 #define ipc_call_sync_4_1(phoneid, method, arg1, arg2, arg3, arg4, res1) \138 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), 0, \139 (res1), 0, 0, 0, 0)140 #define ipc_call_sync_4_2(phoneid, method, arg1, arg2, arg3, arg4, res1, res2) \141 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), 0, \142 (res1), (res2), 0, 0, 0)143 #define ipc_call_sync_4_3(phoneid, method, arg1, arg2, arg3, arg4, res1, res2, \144 res3) \145 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), \146 (arg4), 0, (res1), (res2), (res3), 0, 0)147 #define ipc_call_sync_4_4(phoneid, method, arg1, arg2, arg3, arg4, res1, res2, \148 res3, res4) \149 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), \150 (arg4), 0, (res1), (res2), (res3), (res4), 0)151 #define ipc_call_sync_4_5(phoneid, method, arg1, arg2, arg3, arg4, res1, res2, \152 res3, res4, res5) \153 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), \154 (arg4), 0, (res1), (res2), (res3), (res4), (res5))155 156 #define ipc_call_sync_5_0(phoneid, method, arg1, arg2, arg3, arg4, arg5) \157 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \158 (arg5), 0, 0, 0, 0, 0)159 #define ipc_call_sync_5_1(phoneid, method, arg1, arg2, arg3, arg4, arg5, res1) \160 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \161 (arg5), (res1), 0, 0, 0, 0)162 #define ipc_call_sync_5_2(phoneid, method, arg1, arg2, arg3, arg4, arg5, res1, \163 res2) \164 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), \165 (arg4), (arg5), (res1), (res2), 0, 0, 0)166 #define ipc_call_sync_5_3(phoneid, method, arg1, arg2, arg3, arg4, arg5, res1, \167 res2, res3) \168 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), \169 (arg4), (arg5), (res1), (res2), (res3), 0, 0)170 #define ipc_call_sync_5_4(phoneid, method, arg1, arg2, arg3, arg4, arg5, res1, \171 res2, res3, res4) \172 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), \173 (arg4), (arg5), (res1), (res2), (res3), (res4), 0)174 #define ipc_call_sync_5_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, res1, \175 res2, res3, res4, res5) \176 ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), \177 (arg4), (arg5), (res1), (res2), (res3), (res4), (res5))178 179 extern int ipc_call_sync_fast(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t,180 sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *);181 182 extern int ipc_call_sync_slow(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t,183 sysarg_t, sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *,184 sysarg_t *);185 49 186 50 extern ipc_callid_t ipc_wait_cycle(ipc_call_t *, sysarg_t, unsigned int); … … 254 118 sysarg_t, sysarg_t, void *, ipc_async_callback_t, bool); 255 119 256 extern int ipc_clone_establish(int);257 extern int ipc_connect_to_me(int, sysarg_t, sysarg_t, sysarg_t, task_id_t *,258 sysarg_t *);259 extern int ipc_connect_me_to(int, sysarg_t, sysarg_t, sysarg_t);260 extern int ipc_connect_me_to_blocking(int, sysarg_t, sysarg_t, sysarg_t);261 262 120 extern int ipc_hangup(int); 263 121 … … 267 125 sysarg_t, sysarg_t, sysarg_t, unsigned int); 268 126 269 /*270 * User-friendly wrappers for ipc_share_in_start().271 */272 273 #define ipc_share_in_start_0_0(phoneid, size, dst) \274 ipc_share_in_start((phoneid), (size), 0, NULL, (dst))275 #define ipc_share_in_start_0_1(phoneid, size, flags, dst) \276 ipc_share_in_start((phoneid), (size), 0, (flags), (dst))277 #define ipc_share_in_start_1_0(phoneid, size, arg, dst) \278 ipc_share_in_start((phoneid), (size), (arg), NULL, (dst))279 #define ipc_share_in_start_1_1(phoneid, size, arg, flags, dst) \280 ipc_share_in_start((phoneid), (size), (arg), (flags), (dst))281 282 extern int ipc_share_in_start(int, size_t, sysarg_t, unsigned int *, void **);283 extern int ipc_share_in_finalize(ipc_callid_t, void *, unsigned int);284 extern int ipc_share_out_start(int, void *, unsigned int);285 extern int ipc_share_out_finalize(ipc_callid_t, void **);286 extern int ipc_data_read_start(int, void *, size_t);287 extern int ipc_data_read_finalize(ipc_callid_t, const void *, size_t);288 extern int ipc_data_write_start(int, const void *, size_t);289 extern int ipc_data_write_finalize(ipc_callid_t, void *, size_t);290 291 127 extern int ipc_connect_kbox(task_id_t); 292 128 -
uspace/lib/c/include/ipc/mouseev.h
rb9cb911 r7cfe5c0 47 47 typedef enum { 48 48 MOUSEEV_MOVE_EVENT = IPC_FIRST_USER_METHOD, 49 MOUSEEV_ABS_MOVE_EVENT, 49 50 MOUSEEV_BUTTON_EVENT 50 51 } mouseev_notif_t; -
uspace/lib/c/include/str.h
rb9cb911 r7cfe5c0 56 56 57 57 extern wchar_t str_decode(const char *str, size_t *offset, size_t sz); 58 extern wchar_t str_decode_reverse(const char *str, size_t *offset, size_t sz); 58 59 extern int chr_encode(const wchar_t ch, char *str, size_t *offset, size_t sz); 59 60 … … 72 73 extern size_t str_nlength(const char *str, size_t size); 73 74 extern size_t wstr_nlength(const wchar_t *str, size_t size); 75 76 extern size_t chr_width(wchar_t ch); 77 extern size_t str_width(const char *str); 74 78 75 79 extern bool ascii_check(wchar_t ch); -
uspace/lib/c/include/task.h
rb9cb911 r7cfe5c0 38 38 #include <sys/types.h> 39 39 #include <abi/proc/task.h> 40 #include <stdarg.h> 40 41 41 42 typedef enum { … … 48 49 extern int task_kill(task_id_t); 49 50 50 extern task_id_t task_spawn(const char *, const char *const[], int *);51 51 extern int task_spawnv(task_id_t *, const char *path, const char *const []); 52 52 extern int task_spawnvf(task_id_t *, const char *path, const char *const [], 53 53 int *const []); 54 extern int task_spawn(task_id_t *, const char *path, int, va_list ap); 54 55 extern int task_spawnl(task_id_t *, const char *path, ...); 55 56
Note:
See TracChangeset
for help on using the changeset viewer.