MCPcopy Create free account
hub / github.com/NetHack/NetHack / curses_str_remainder

Function curses_str_remainder

win/curses/cursmisc.c:362–424  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

360/* Return the remaining portion of a string after hacking-off line_num lines */
361
362char *
363curses_str_remainder(const char *str, int width, int line_num)
364{
365 int last_space, count;
366 char *retstr;
367 int curline = 0;
368 int strsize = strlen(str) + 1;
369#if (__STDC_VERSION__ >= 199901L) && !defined(_MSC_VER)
370 char substr[strsize];
371 char tmpstr[strsize];
372
373 strcpy(substr, str);
374#else
375#ifndef BUFSZ
376#define BUFSZ 256
377#endif
378 char substr[BUFSZ * 2];
379 char tmpstr[BUFSZ * 2];
380
381 if (strsize > (BUFSZ * 2) - 1) {
382 paniclog("curses", "curses_str_remainder() string too long.");
383 strncpy(substr, str, (BUFSZ * 2) - 2);
384 substr[(BUFSZ * 2) - 1] = '\0';
385 } else
386 strcpy(substr, str);
387#endif
388
389 while (curline < line_num) {
390 if (strlen(substr) == 0) {
391 break;
392 }
393 curline++;
394 last_space = 0;
395 for (count = 0; count <= width; count++) {
396 if (substr[count] == ' ') {
397 last_space = count;
398 } else if (substr[count] == '\0') {
399 last_space = count;
400 break;
401 }
402 }
403 if (last_space == 0) { /* No spaces found */
404 last_space = count - 1;
405 }
406 assert(IndexOk(last_space, substr));
407 if (substr[last_space] == '\0') {
408 break;
409 }
410 for (count = (last_space + 1); count < (int) strlen(substr); count++) {
411 tmpstr[count - (last_space + 1)] = substr[count];
412 }
413 tmpstr[count - (last_space + 1)] = '\0';
414 strcpy(substr, tmpstr);
415 }
416
417 if (curline < line_num) {
418 return NULL;
419 }

Callers 1

curses_message_win_putsFunction · 0.85

Calls 2

paniclogFunction · 0.85
curses_copy_ofFunction · 0.85

Tested by

no test coverage detected