This is Unofficial EPICS BASE Doxygen Site
epicsReadline.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include "envDefs.h"
#include "epicsReadline.h"
+ Include dependency graph for epicsReadline.c:

Go to the source code of this file.

Classes

struct  readlineContext
 

Macros

#define EPICS_COMMANDLINE_LIBRARY_EPICS   0
 
#define EPICS_COMMANDLINE_LIBRARY_LIBTECLA   1
 
#define EPICS_COMMANDLINE_LIBRARY_LEDLIB   1
 
#define EPICS_COMMANDLINE_LIBRARY_OTHER   1
 
#define EPICS_COMMANDLINE_LIBRARY_READLINE   2
 
#define EPICS_COMMANDLINE_LIBRARY_READLINE_CURSES   2
 
#define EPICS_COMMANDLINE_LIBRARY_READLINE_NCURSES   2
 
#define EPICS_COMMANDLINE_LIBRARY   EPICS_COMMANDLINE_LIBRARY_EPICS
 

Functions

void *epicsStdCall epicsReadlineBegin (FILE *in)
 Create a command-line context. More...
 
char *epicsStdCall epicsReadline (const char *prompt, void *context)
 Read a line of input. More...
 
void epicsStdCall epicsReadlineEnd (void *context)
 Destroy a command-line context. More...
 

Macro Definition Documentation

#define EPICS_COMMANDLINE_LIBRARY   EPICS_COMMANDLINE_LIBRARY_EPICS

Definition at line 31 of file epicsReadline.c.

#define EPICS_COMMANDLINE_LIBRARY_EPICS   0

Definition at line 18 of file epicsReadline.c.

#define EPICS_COMMANDLINE_LIBRARY_LEDLIB   1

Definition at line 22 of file epicsReadline.c.

#define EPICS_COMMANDLINE_LIBRARY_LIBTECLA   1

Definition at line 21 of file epicsReadline.c.

#define EPICS_COMMANDLINE_LIBRARY_OTHER   1

Definition at line 23 of file epicsReadline.c.

#define EPICS_COMMANDLINE_LIBRARY_READLINE   2

Definition at line 26 of file epicsReadline.c.

#define EPICS_COMMANDLINE_LIBRARY_READLINE_CURSES   2

Definition at line 27 of file epicsReadline.c.

#define EPICS_COMMANDLINE_LIBRARY_READLINE_NCURSES   2

Definition at line 28 of file epicsReadline.c.

Function Documentation

char* epicsStdCall epicsReadline ( const char *  prompt,
void *  context 
)

Read a line of input.

Parameters
promptPrompt string
contextTo read from
Returns
Line read

Definition at line 81 of file epicsReadline.c.

82 {
83  struct readlineContext *rc = context;
84  FILE *in;
85  char *line;
86  int c; /* char is unsigned on some archs, EOF is -ve */
87  int linelen = 0;
88  int linesize = 50;
89 
90  if (rc->osd)
91  return osdReadline(prompt, rc);
92 
93  free(rc->line);
94  rc->line = NULL;
95  if ((in = rc->in) == NULL) {
96  in = stdin;
97  if (prompt) {
98  fputs(prompt, stdout);
99  fflush(stdout);
100  }
101  }
102  line = (char *)malloc(linesize);
103  if (line == NULL) {
104  printf("Out of memory!\n");
105  return NULL;
106  }
107  while ((c = getc(in)) != '\n') {
108  if (c == EOF) {
109  if (ferror(in)) {
110  if ((errno == EINTR) || (errno == EPIPE)) {
111  clearerr(in);
112  continue;
113  }
114  }
115  free (line);
116  return NULL;
117  }
118  if ((linelen + 1) >= linesize) {
119  char *cp;
120 
121  linesize += 50;
122  cp = (char *)realloc(line, linesize);
123  if (cp == NULL) {
124  printf("Out of memory!\n");
125  free(line);
126  return NULL;
127  }
128  line = cp;
129  }
130  line[linelen++] = c;
131  }
132  line[linelen] = '\0';
133  rc->line = line;
134  return line;
135 }
int linesize
Definition: reader.c:26
#define printf
Definition: epicsStdio.h:41
#define NULL
Definition: catime.c:38
char * line
Definition: reader.c:25
#define stdout
Definition: epicsStdio.h:30
#define stdin
Definition: epicsStdio.h:28
struct osdContext * osd
Definition: epicsReadline.c:38
void* epicsStdCall epicsReadlineBegin ( FILE *  in)

Create a command-line context.

Parameters
inFilehandle to read from
Returns
Command-line context

Definition at line 64 of file epicsReadline.c.

65 {
66  struct readlineContext *rc = calloc(1, sizeof(*rc));
67 
68  if (rc) {
69  rc->in = in;
70  rc->line = NULL;
72  osdReadlineBegin(rc);
73  }
74  return rc;
75 }
LIBCOM_API const char *epicsStdCall envGetConfigParamPtr(const ENV_PARAM *pParam)
Get a configuration parameter&#39;s value or default string.
Definition: envSubr.c:81
#define NULL
Definition: catime.c:38
LIBCOM_API const ENV_PARAM IOCSH_HISTEDIT_DISABLE
void epicsStdCall epicsReadlineEnd ( void *  context)

Destroy a command-line context.

Parameters
contextCommand-line context to destroy

Definition at line 141 of file epicsReadline.c.

142 {
143  if (context) {
144  struct readlineContext *rc = context;
145 
146  if (rc->osd)
147  osdReadlineEnd(rc);
148  else
149  free(rc->line);
150  free(rc);
151  }
152 }
struct osdContext * osd
Definition: epicsReadline.c:38