aboutsummaryrefslogtreecommitdiff
path: root/sys/libc/README
blob: 4801a3699f8d62010d3f1c39eff37de8f747cd1e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
LIBC -- C language binding for a portion of the IRAF VOS
	UNIX emulator

This directory contains

    [1]	A subset of the routines from the UNIX stdio library.  These routines
	emulate the equivalent UNIX routines but are interfaced to the IRAF
	program interface.

    [2]	C-callable versions of a subset of the routines from the IRAF program
	interface.  Included are portions of the following packages:

		file i/o
		formatted i/o
		environment
		process control
		terminal control
		memory management
		exception handling

The header files "irafio.h" and "names.h" should be included in all C files
which reference the C library.  The include files "stdio.h" and "ctype.h"
should be used wherever they would be used in a UNIX/C system.


IMPORTANT NOTE:

    Routines marked VARARGS are machine dependent in that they assume a
certain ordering (left to right) for the argument list.  On some machines
the ordering may be the opposite.

TODO: Rewrite these procedures to use the UNIX <varargs.h> macros.


1. LIBC Emulation of UNIX C-Library Procedures

                   syntax                              err       eof

       double = asin (x)
       double = acos (x)
       double = atan (x)
      double = atan2 (x, y)
       double = atof (str)                              0.
          int = atoi (str)                              0
         long = atol (str)                              0
      charp = calloc (nelems, elsize)                  NULL
            clearerr (fp)
        double = cos (x)
        double = exp (x)
              fclose (fp)                              EOF
       FILE = fdopen (fd, modestr)                     NULL
         bool = feof (fp)
       bool = ferror (fp)
              fflush (fp)                              EOF
          ch = fgetc (fp)                              EOF
       charp = fgets (buf, maxch, fp)                  NULL
         fd = fileno (fp)
        FILE = fopen (fname, modestr)                  NULL
               fputc (ch, fp)                          EOF
               fputs (str, fp)
       nelem = fread (bp, szelem, nelem, fp)            0         0
                free (buf)
      FILE = freopen (fname, modestr, fp)              NULL
               fseek (fp, offset, origin)              EOF
        long = ftell (fp)
      nelem = fwrite (bp, szelem, nelem, fp)            0         0
           ch = getc (fp)                              EOF       EOF
        ch = getchar ()                                EOF       EOF
      charp = getenv (envvar)                          NULL
        charp = gets (buf)                             NULL      NULL
         word = getw (fp)                              EOF       EOF
       charp = index (str, ch)                         NULL
        double = log (x)
      double = log10 (x)
	  int = nint (x)
      charp = malloc (nbytes)                          NULL
      charp = mktemp (template)                        NULL
              perror (prefix)
        double = pow (x, y)
              printf (format, argp)
             fprintf (fp, format, argp)
             sprintf (str, format, argp)
             eprintf (format, argp)
           ch = putc (ch, fp)                          EOF
        ch = putchar (ch)                              EOF
                puts (str)
         word = putw (word, fp)                        EOF
	       qsort (array, len, isize, compar)
     charp = realloc (buf, newsize)                    NULL
              rewind (fp)                              EOF
      charp = rindex (str, ch)
       nscan = scanf (format, argp)                    EOF       EOF
      nscan = fscanf (fp, format, argp)                EOF       EOF
      nscan = sscanf (str, format, argp)               EOF       EOF
              setbuf (fp, buf)
           setbuffer (fp, buf, size)
          setlinebuf (fp)
        double = sin (x)
       double = sqrt (x)
      charp = strcat (s1, s2)
      charp = strcmp (s1, s2)
      charp = strcpy (s1, s2)
        int = strlen (str)
     charp = strncat (s1, s2, n)
     charp = strncmp (s1, s2, n)
     charp = strncpy (s1, s2, n)
       stat = system (cmd)
         ch = ungetc (ch, fp)                          EOF



2. System Calls

All output parameters are shown as "&name" regardless of whether the actual
parameter is a pointer.  If no ERR or EOF type is shown it is inapplicable to
the procedure.  The error type "*" denotes an error action which will lead to
error recovery if not caught by calling the procedure inside an "iferr".  In
general, error actions are permitted only where errors are not expected and
where we suspect that the programmer would ignore an error return code if one
were used.  Fatal errors cannot be caught but "cannot happen".


                         syntax                         err        eof

       bool = c_access (fname, mode, type)               *
   longsec = c_clktime (reftime)
               c_close (fd)                              *
     charp = c_cnvdate (clktime, &outstr, maxch)
     charp = c_cnvtime (clktime, &outstr, maxch)
  longmsec = c_cputime (reftime)
              c_delete (fname)                          ERR
    nchars = c_envfind (var, &outstr, maxch)             0
    nchars = c_envgets (var, &outstr, maxch)             0
      bool = c_envgetb (var)                           no=0
      ival = c_envgeti (var)                             *
             c_envputs (var, value)                      *
             c_envlist (fd, prefix, show_redefs)         *
             c_envmark (&envp)
   nredefs = c_envfree (envp)
     nscan = c_envscan (input_source)                    *
               c_error (errcode, errmsg)                 *
              c_erract (action)                          *
    errcode = c_errget (&outstr, maxch)
              c_fchdir (newdir)                         ERR
         ch = c_filbuf (fp)                             EOF        EOF
               c_finfo (fname, fi)                      ERR
         ch = c_flsbuf (ch, fp)                         EOF
               c_flush (fd)                              *
     nchars = c_fmapfn (vfn, &osfn, maxch)               0
       stat = c_fmkdir (newdir)				ERR
     nchars = c_fnldir (vfn, &ldir, maxch)
     nchars = c_fnroot (vfn, &root, maxch)
     nchars = c_fnextn (vfn, &extn, maxch)
      nchars = c_fpath (vfn, &osfn, maxch)		 0
         fd = c_fredir (fd, fname, mode, type)          ERR
               c_fseti (fd, param, value)                *
       ival = c_fstati (fd, param)                       *
        int = c_getpid ()
              c_getuid (&outstr, maxch)                  *
 os_chan = c_kimapchan (ki_chan, nodename, maxch)
      token = c_lexnum (str, &toklen)
     nchars = c_mktemp (root, &temp_filename, maxch)     0
         long = c_note (fd)                              *
           fd = c_open (fname, mode, type)              ERR
   exit_stat = c_oscmd (cmd, infile, outfile, errfile)   *
	     c_prchdir (pid, newdir)			ERR
 exit_stat = c_prcldpr (job)                             *
             c_prclose (pid)                             *
       bool = c_prdone (job)                             *
	    c_prenvset (pid, envvar, valuestr)		ERR
              c_prkill (job)                            ERR
       pid = c_propdpr (process, bkgfile)               NULL
        pid = c_propen (process, &in, &out)             NULL
             c_prredir (pid, stream, new_fd)            ERR
            c_prsignal (pid, signal)                    ERR
       nbytes = c_read (fd, &buf, maxbytes)              *         EOF
              c_rename (old_fname, new_fname)           ERR
      charp = c_salloc (nbytes)                        fatal
               c_smark (&sp)                           fatal
               c_sfree (sp)                            fatal
       bool = c_stkcmp (p1, p2)                          *
                c_seek (fd, offset)                     ERR
     xcharp = c_sppstr (xstr)
       cstr = c_strpak (sppstr, &cstr, maxch)
     xcharp = c_strupk (str, &xoutstr, maxch)
              c_tsleep (nseconds)
  tty(int) = c_ttyodes (ttyname)                        ERR
             c_ttycdes (tty)                             *
             c_ttyseti (tty, param, value)               *
     ival = c_ttystati (tty, param)                      *
      bool = c_ttygetb (tty, cap)                      no=0
      ival = c_ttygeti (tty, cap)                        0
      fval = c_ttygetr (tty, cap)                        0.
    nchars = c_ttygets (tty, cap, &outstr, maxch)        0
             c_ttyputs (fd, tty, cap, afflncnt)         ERR
             c_ttyctrl (fd, tty, cap, afflncnt)         ERR
            c_ttyclear (fd, tty)                         *
          c_ttyclearln (fd, tty)                         *
             c_ttygoto (fd, tty, col, line)              *
             c_ttyinit (fd, tty)                         *
          c_ttyputline (fd, tty, line, map_cc)           *
               c_ttyso (fd, tty, onoff)                  *
              c_ungetc (fd, ch)                         ERR
           c_ungetline (fd, str)                        ERR
              c_vfnbrk (vfn, root, extn)
      nbytes = c_write (fd, buf, nbytes)                 *
               c_xwhen (vex, new_handler, old_handler)   *
               c_xgmes (oscode, oserrmsg, maxch)