diff options
-rw-r--r-- | atarist/config.h | 912 | ||||
-rw-r--r-- | atarist/test/err | 4 | ||||
-rw-r--r-- | atarist/test/glob | 4 | ||||
-rw-r--r-- | config_h.SH | 79 | ||||
-rw-r--r-- | hints/dgux.sh | 7 | ||||
-rw-r--r-- | hints/dynix.sh | 1 | ||||
-rw-r--r-- | os2/crypt.c | 276 | ||||
-rw-r--r-- | patchlevel.h | 2 | ||||
-rw-r--r-- | t/op/dbm.t | 5 | ||||
-rw-r--r-- | usub/curses.mus | 15 |
10 files changed, 1288 insertions, 17 deletions
diff --git a/atarist/config.h b/atarist/config.h new file mode 100644 index 0000000000..7e432546f9 --- /dev/null +++ b/atarist/config.h @@ -0,0 +1,912 @@ +#ifndef config_h +#define config_h +/* config.h + * This file was produced by running the config.h.SH script, which + * gets its values from config.sh, which is generally produced by + * running Configure. + * + * Feel free to modify any of this as the need arises. Note, however, + * that running config.h.SH again will wipe out any changes you've made. + * For a more permanent change edit config.sh and rerun config.h.SH. + */ + /*SUPPRESS 460*/ + + +/* EUNICE + * This symbol, if defined, indicates that the program is being compiled + * under the EUNICE package under VMS. The program will need to handle + * things like files that don't go away the first time you unlink them, + * due to version numbering. It will also need to compensate for lack + * of a respectable link() command. + */ +/* VMS + * This symbol, if defined, indicates that the program is running under + * VMS. It is currently only set in conjunction with the EUNICE symbol. + */ +/*#undef EUNICE /**/ +/*#undef VMS /**/ + +/* ALIGNBYTES + * This symbol contains the number of bytes required to align a double. + * Usual values are 2, 4, and 8. + */ +#define ALIGNBYTES 2 /**/ + +/* BIN + * This symbol holds the name of the directory in which the user wants + * to keep publicly executable images for the package in question. It + * is most often a local directory such as /usr/local/bin. + */ +#define BIN "/bin" /**/ + +/* BYTEORDER + * This symbol contains an encoding of the order of bytes in a long. + * Usual values (in hex) are 0x1234, 0x4321, 0x2143, 0x3412... + */ +#define BYTEORDER 0x4321 /**/ + +/* CPPSTDIN + * This symbol contains the first part of the string which will invoke + * the C preprocessor on the standard input and produce to standard + * output. Typical value of "cc -E" or "/lib/cpp". + */ +/* CPPMINUS + * This symbol contains the second part of the string which will invoke + * the C preprocessor on the standard input and produce to standard + * output. This symbol will have the value "-" if CPPSTDIN needs a minus + * to specify standard input, otherwise the value is "". + */ +#define CPPSTDIN "gcc -E" +#define CPPMINUS "" + +/* HAS_BCMP + * This symbol, if defined, indicates that the bcmp routine is available + * to compare blocks of memory. If undefined, use memcmp. If that's + * not available, roll your own. + */ +#define HAS_BCMP /**/ + +/* HAS_BCOPY + * This symbol, if defined, indicates that the bcopy routine is available + * to copy blocks of memory. Otherwise you should probably use memcpy(). + * If neither is defined, roll your own. + */ +/* SAFE_BCOPY + * This symbol, if defined, indicates that the bcopy routine is available + * to copy potentially overlapping copy blocks of bcopy. Otherwise you + * should probably use memmove() or memcpy(). If neither is defined, + * roll your own. + */ +#define HAS_BCOPY /**/ +#define SAFE_BCOPY /**/ + +/* HAS_BZERO + * This symbol, if defined, indicates that the bzero routine is available + * to zero blocks of memory. Otherwise you should probably use memset() + * or roll your own. + */ +#define HAS_BZERO /**/ + +/* CASTNEGFLOAT + * This symbol, if defined, indicates that this C compiler knows how to + * cast negative or large floating point numbers to unsigned longs, ints + * and shorts. + */ +/* CASTFLAGS + * This symbol contains flags that say what difficulties the compiler + * has casting odd floating values to unsigned long: + * 1 = couldn't cast < 0 + * 2 = couldn't cast >= 0x80000000 + */ +#define CASTNEGFLOAT /**/ +#define CASTFLAGS 0 /**/ + +/* CHARSPRINTF + * This symbol is defined if this system declares "char *sprintf()" in + * stdio.h. The trend seems to be to declare it as "int sprintf()". It + * is up to the package author to declare sprintf correctly based on the + * symbol. + */ +/* #define CHARSPRINTF /**/ + +/* HAS_CHSIZE + * This symbol, if defined, indicates that the chsize routine is available + * to truncate files. You might need a -lx to get this routine. + */ +/*#undef HAS_CHSIZE /**/ + +/* HAS_CRYPT + * This symbol, if defined, indicates that the crypt routine is available + * to encrypt passwords and the like. + */ +/* #define HAS_CRYPT /**/ + +/* CSH + * This symbol, if defined, indicates that the C-shell exists. + * If defined, contains the full pathname of csh. + */ +/* #define CSH "/bin/csh" /**/ + +/* DOSUID + * This symbol, if defined, indicates that the C program should + * check the script that it is executing for setuid/setgid bits, and + * attempt to emulate setuid/setgid on systems that have disabled + * setuid #! scripts because the kernel can't do it securely. + * It is up to the package designer to make sure that this emulation + * is done securely. Among other things, it should do an fstat on + * the script it just opened to make sure it really is a setuid/setgid + * script, it should make sure the arguments passed correspond exactly + * to the argument on the #! line, and it should not trust any + * subprocesses to which it must pass the filename rather than the + * file descriptor of the script to be executed. + */ +/*#undef DOSUID /**/ + +/* HAS_DUP2 + * This symbol, if defined, indicates that the dup2 routine is available + * to dup file descriptors. Otherwise you should use dup(). + */ +#define HAS_DUP2 /**/ + +/* HAS_FCHMOD + * This symbol, if defined, indicates that the fchmod routine is available + * to change mode of opened files. If unavailable, use chmod(). + */ +/* #define HAS_FCHMOD /**/ + +/* HAS_FCHOWN + * This symbol, if defined, indicates that the fchown routine is available + * to change ownership of opened files. If unavailable, use chown(). + */ +/* #define HAS_FCHOWN /**/ + +/* HAS_FCNTL + * This symbol, if defined, indicates to the C program that + * the fcntl() function exists. + */ +/* #define HAS_FCNTL /**/ + +/* FLEXFILENAMES + * This symbol, if defined, indicates that the system supports filenames + * longer than 14 characters. + */ +/* #define FLEXFILENAMES /**/ + +/* HAS_FLOCK + * This symbol, if defined, indicates that the flock() routine is + * available to do file locking. + */ +/* #define HAS_FLOCK /**/ + +/* HAS_GETGROUPS + * This symbol, if defined, indicates that the getgroups() routine is + * available to get the list of process groups. If unavailable, multiple + * groups are probably not supported. + */ +/* #define HAS_GETGROUPS /**/ + +/* HAS_GETHOSTENT + * This symbol, if defined, indicates that the gethostent() routine is + * available to lookup host names in some data base or other. + */ +/* #define HAS_GETHOSTENT /**/ + +/* HAS_GETPGRP + * This symbol, if defined, indicates that the getpgrp() routine is + * available to get the current process group. + */ +#define HAS_GETPGRP /**/ + +/* HAS_GETPGRP2 + * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX) + * routine is available to get the current process group. + */ +/*#undef HAS_GETPGRP2 /**/ + +/* HAS_GETPRIORITY + * This symbol, if defined, indicates that the getpriority() routine is + * available to get a process's priority. + */ +/* #define HAS_GETPRIORITY /**/ + +/* HAS_HTONS + * This symbol, if defined, indicates that the htons routine (and friends) + * are available to do network order byte swapping. + */ +/* HAS_HTONL + * This symbol, if defined, indicates that the htonl routine (and friends) + * are available to do network order byte swapping. + */ +/* HAS_NTOHS + * This symbol, if defined, indicates that the ntohs routine (and friends) + * are available to do network order byte swapping. + */ +/* HAS_NTOHL + * This symbol, if defined, indicates that the ntohl routine (and friends) + * are available to do network order byte swapping. + */ +/* #define HAS_HTONS /**/ +/* #define HAS_HTONL /**/ +/* #define HAS_NTOHS /**/ +/* #define HAS_NTOHL /**/ + +/* index + * This preprocessor symbol is defined, along with rindex, if the system + * uses the strchr and strrchr routines instead. + */ +/* rindex + * This preprocessor symbol is defined, along with index, if the system + * uses the strchr and strrchr routines instead. + */ +/* #define index strchr /* cultural */ +/* #define rindex strrchr /* differences? */ +#include <string.h> + +/* HAS_ISASCII + * This symbol, if defined, indicates that the isascii routine is available + * to test characters for asciiness. + */ +#define HAS_ISASCII /**/ + +/* HAS_KILLPG + * This symbol, if defined, indicates that the killpg routine is available + * to kill process groups. If unavailable, you probably should use kill + * with a negative process number. + */ +/* #define HAS_KILLPG /**/ + +/* HAS_LSTAT + * This symbol, if defined, indicates that the lstat() routine is + * available to stat symbolic links. + */ +#define HAS_LSTAT /**/ + +/* HAS_MEMCMP + * This symbol, if defined, indicates that the memcmp routine is available + * to compare blocks of memory. If undefined, roll your own. + */ +#define HAS_MEMCMP /**/ + +/* HAS_MEMCPY + * This symbol, if defined, indicates that the memcpy routine is available + * to copy blocks of memory. Otherwise you should probably use bcopy(). + * If neither is defined, roll your own. + */ +/* SAFE_MEMCPY + * This symbol, if defined, indicates that the memcpy routine is available + * to copy potentially overlapping copy blocks of memory. Otherwise you + * should probably use memmove() or bcopy(). If neither is defined, + * roll your own. + */ +#define HAS_MEMCPY /**/ +/*#undef SAFE_MEMCPY /**/ + +/* HAS_MEMMOVE + * This symbol, if defined, indicates that the memmove routine is available + * to move potentially overlapping blocks of memory. Otherwise you + * should use bcopy() or roll your own. + */ +/*#undef HAS_MEMMOVE /**/ + +/* HAS_MEMSET + * This symbol, if defined, indicates that the memset routine is available + * to set a block of memory to a character. If undefined, roll your own. + */ +#define HAS_MEMSET /**/ + +/* HAS_MKDIR + * This symbol, if defined, indicates that the mkdir routine is available + * to create directories. Otherwise you should fork off a new process to + * exec /bin/mkdir. + */ +#define HAS_MKDIR /**/ + +/* HAS_MSG + * This symbol, if defined, indicates that the entire msg*(2) library is + * supported. + */ +/* #define HAS_MSG /**/ + +/* HAS_MSGCTL + * This symbol, if defined, indicates that the msgctl() routine is + * available to control message passing. + */ +/* #define HAS_MSGCTL /**/ + +/* HAS_MSGGET + * This symbol, if defined, indicates that the msgget() routine is + * available to get messages. + */ +/* #define HAS_MSGGET /**/ + +/* HAS_MSGRCV + * This symbol, if defined, indicates that the msgrcv() routine is + * available to receive messages. + */ +/* #define HAS_MSGRCV /**/ + +/* HAS_MSGSND + * This symbol, if defined, indicates that the msgsnd() routine is + * available to send messages. + */ +/* #define HAS_MSGSND /**/ + +/* HAS_NDBM + * This symbol, if defined, indicates that ndbm.h exists and should + * be included. + */ +/* #define HAS_NDBM /**/ + +/* HAS_ODBM + * This symbol, if defined, indicates that dbm.h exists and should + * be included. + */ +/* #define HAS_ODBM /**/ + +/* HAS_OPEN3 + * This manifest constant lets the C program know that the three + * argument form of open(2) is available. + */ +#define HAS_OPEN3 /**/ + +/* HAS_READDIR + * This symbol, if defined, indicates that the readdir routine is available + * from the C library to read directories. + */ +#define HAS_READDIR /**/ + +/* HAS_RENAME + * This symbol, if defined, indicates that the rename routine is available + * to rename files. Otherwise you should do the unlink(), link(), unlink() + * trick. + */ +#define HAS_RENAME /**/ + +/* HAS_REWINDDIR + * This symbol, if defined, indicates that the rewindir routine is + * available to rewind directories. + */ +#define HAS_REWINDDIR /**/ + +/* HAS_RMDIR + * This symbol, if defined, indicates that the rmdir routine is available + * to remove directories. Otherwise you should fork off a new process to + * exec /bin/rmdir. + */ +#define HAS_RMDIR /**/ + +/* HAS_SEEKDIR + * This symbol, if defined, indicates that the seekdir routine is + * available to seek into directories. + */ +#define HAS_SEEKDIR /**/ + +/* HAS_SELECT + * This symbol, if defined, indicates that the select() subroutine + * exists. + */ +/* #define HAS_SELECT /**/ + +/* HAS_SEM + * This symbol, if defined, indicates that the entire sem*(2) library is + * supported. + */ +/* #define HAS_SEM /**/ + +/* HAS_SEMCTL + * This symbol, if defined, indicates that the semctl() routine is + * available to control semaphores. + */ +/* #define HAS_SEMCTL /**/ + +/* HAS_SEMGET + * This symbol, if defined, indicates that the semget() routine is + * available to get semaphores ids. + */ +/* #define HAS_SEMGET /**/ + +/* HAS_SEMOP + * This symbol, if defined, indicates that the semop() routine is + * available to perform semaphore operations. + */ +/* #define HAS_SEMOP /**/ + +/* HAS_SETEGID + * This symbol, if defined, indicates that the setegid routine is available + * to change the effective gid of the current program. + */ +#define HAS_SETEGID /**/ + +/* HAS_SETEUID + * This symbol, if defined, indicates that the seteuid routine is available + * to change the effective uid of the current program. + */ +#define HAS_SETEUID /**/ + +/* HAS_SETPGRP + * This symbol, if defined, indicates that the setpgrp() routine is + * available to set the current process group. + */ +#define HAS_SETPGRP /**/ + +/* HAS_SETPGRP2 + * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX) + * routine is available to set the current process group. + */ +/*#undef HAS_SETPGRP2 /**/ + +/* HAS_SETPRIORITY + * This symbol, if defined, indicates that the setpriority() routine is + * available to set a process's priority. + */ +/* #define HAS_SETPRIORITY /**/ + +/* HAS_SETREGID + * This symbol, if defined, indicates that the setregid routine is + * available to change the real and effective gid of the current program. + */ +/* HAS_SETRESGID + * This symbol, if defined, indicates that the setresgid routine is + * available to change the real, effective and saved gid of the current + * program. + */ +/* #define HAS_SETREGID /**/ +/*#undef HAS_SETRESGID /**/ + +/* HAS_SETREUID + * This symbol, if defined, indicates that the setreuid routine is + * available to change the real and effective uid of the current program. + */ +/* HAS_SETRESUID + * This symbol, if defined, indicates that the setresuid routine is + * available to change the real, effective and saved uid of the current + * program. + */ +/* #define HAS_SETREUID /**/ +/*#undef HAS_SETRESUID /**/ + +/* HAS_SETRGID + * This symbol, if defined, indicates that the setrgid routine is available + * to change the real gid of the current program. + */ +/* #define HAS_SETRGID /**/ + +/* HAS_SETRUID + * This symbol, if defined, indicates that the setruid routine is available + * to change the real uid of the current program. + */ +/* #define HAS_SETRUID /**/ + +/* HAS_SHM + * This symbol, if defined, indicates that the entire shm*(2) library is + * supported. + */ +/* #define HAS_SHM /**/ + +/* HAS_SHMAT + * This symbol, if defined, indicates that the shmat() routine is + * available to attach a shared memory segment. + */ +/* VOID_SHMAT + * This symbol, if defined, indicates that the shmat() routine + * returns a pointer of type void*. + */ +/* #define HAS_SHMAT /**/ + +/*#undef VOIDSHMAT /**/ + +/* HAS_SHMCTL + * This symbol, if defined, indicates that the shmctl() routine is + * available to control a shared memory segment. + */ +/* #define HAS_SHMCTL /**/ + +/* HAS_SHMDT + * This symbol, if defined, indicates that the shmdt() routine is + * available to detach a shared memory segment. + */ +/* #define HAS_SHMDT /**/ + +/* HAS_SHMGET + * This symbol, if defined, indicates that the shmget() routine is + * available to get a shared memory segment id. + */ +/* #define HAS_SHMGET /**/ + +/* HAS_SOCKET + * This symbol, if defined, indicates that the BSD socket interface is + * supported. + */ +/* HAS_SOCKETPAIR + * This symbol, if defined, indicates that the BSD socketpair call is + * supported. + */ +/* OLDSOCKET + * This symbol, if defined, indicates that the 4.1c BSD socket interface + * is supported instead of the 4.2/4.3 BSD socket interface. + */ +/* #define HAS_SOCKET /**/ + +/* #define HAS_SOCKETPAIR /**/ + +/*#undef OLDSOCKET /**/ + +/* STATBLOCKS + * This symbol is defined if this system has a stat structure declaring + * st_blksize and st_blocks. + */ +#define STATBLOCKS /**/ + +/* STDSTDIO + * This symbol is defined if this system has a FILE structure declaring + * _ptr and _cnt in stdio.h. + */ +/* #define STDSTDIO /**/ /* we do, but semantics are different */ + +/* STRUCTCOPY + * This symbol, if defined, indicates that this C compiler knows how + * to copy structures. If undefined, you'll need to use a block copy + * routine of some sort instead. + */ +#define STRUCTCOPY /**/ + +/* HAS_STRERROR + * This symbol, if defined, indicates that the strerror() routine is + * available to translate error numbers to strings. + */ +#define HAS_STRERROR /**/ + +/* HAS_SYMLINK + * This symbol, if defined, indicates that the symlink routine is available + * to create symbolic links. + */ +#define HAS_SYMLINK /**/ + +/* HAS_SYSCALL + * This symbol, if defined, indicates that the syscall routine is available + * to call arbitrary system calls. If undefined, that's tough. + */ +#define HAS_SYSCALL /**/ + +/* HAS_TELLDIR + * This symbol, if defined, indicates that the telldir routine is + * available to tell your location in directories. + */ +#define HAS_TELLDIR /**/ + +/* HAS_TRUNCATE + * This symbol, if defined, indicates that the truncate routine is + * available to truncate files. + */ +/* #define HAS_TRUNCATE /**/ + +/* HAS_VFORK + * This symbol, if defined, indicates that vfork() exists. + */ +#ifdef __MINT__ +#define HAS_VFORK /**/ +#endif + +/* VOIDSIG + * This symbol is defined if this system declares "void (*signal())()" in + * signal.h. The old way was to declare it as "int (*signal())()". It + * is up to the package author to declare things correctly based on the + * symbol. + */ +/* TO_SIGNAL + * This symbol's value is either "void" or "int", corresponding to the + * appropriate return "type" of a signal handler. Thus, one can declare + * a signal handler using "TO_SIGNAL (*handler())()", and define the + * handler using "TO_SIGNAL handler(sig)". + */ +#define VOIDSIG /**/ +#define TO_SIGNAL void /**/ + +/* HASVOLATILE + * This symbol, if defined, indicates that this C compiler knows about + * the volatile declaration. + */ +#define HASVOLATILE /**/ + +/* HAS_VPRINTF + * This symbol, if defined, indicates that the vprintf routine is available + * to printf with a pointer to an argument list. If unavailable, you + * may need to write your own, probably in terms of _doprnt(). + */ +/* CHARVSPRINTF + * This symbol is defined if this system has vsprintf() returning type + * (char*). The trend seems to be to declare it as "int vsprintf()". It + * is up to the package author to declare vsprintf correctly based on the + * symbol. + */ +#define HAS_VPRINTF /**/ +/* #define CHARVSPRINTF /**/ + +/* HAS_WAIT4 + * This symbol, if defined, indicates that wait4() exists. + */ +/* #define HAS_WAIT4 /**/ + +/* HAS_WAITPID + * This symbol, if defined, indicates that waitpid() exists. + */ +/*#undef HAS_WAITPID /**/ + +/* GIDTYPE + * This symbol has a value like gid_t, int, ushort, or whatever type is + * used to declare group ids in the kernel. + */ +#define GIDTYPE gid_t /**/ + +/* GROUPSTYPE + * This symbol has a value like gid_t, int, ushort, or whatever type is + * used in the return value of getgroups(). + */ +/* #define GROUPSTYPE unsigned short /**/ + +/* I_FCNTL + * This manifest constant tells the C program to include <fcntl.h>. + */ +#define I_FCNTL /**/ + +/* I_GDBM + * This symbol, if defined, indicates that gdbm.h exists and should + * be included. + */ +#define I_GDBM /**/ +#define HAS_GDBM + +/* I_GRP + * This symbol, if defined, indicates to the C program that it should + * include grp.h. + */ +/* #define I_GRP /**/ + +/* I_NETINET_IN + * This symbol, if defined, indicates to the C program that it should + * include netinet/in.h. + */ +/* I_SYS_IN + * This symbol, if defined, indicates to the C program that it should + * include sys/in.h. + */ +/* #define I_NETINET_IN /**/ +/*#undef I_SYS_IN /**/ + +/* I_PWD + * This symbol, if defined, indicates to the C program that it should + * include pwd.h. + */ +/* PWQUOTA + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_quota. + */ +/* PWAGE + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_age. + */ +/* PWCHANGE + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_change. + */ +/* PWCLASS + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_class. + */ +/* PWEXPIRE + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_expire. + */ +/* PWCOMMENT + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_comment. + */ +#define I_PWD /**/ +/* #define PWQUOTA /**/ +/*#undef PWAGE /**/ +/*#undef PWCHANGE /**/ +/*#undef PWCLASS /**/ +/*#undef PWEXPIRE /**/ +/* #define PWCOMMENT /**/ + +/* I_SYS_FILE + * This manifest constant tells the C program to include <sys/file.h>. + */ +/* #define I_SYS_FILE /**/ + +/* I_SYSIOCTL + * This symbol, if defined, indicates that sys/ioctl.h exists and should + * be included. + */ +#define I_SYSIOCTL /**/ + +/* I_TIME + * This symbol is defined if the program should include <time.h>. + */ +/* I_SYS_TIME + * This symbol is defined if the program should include <sys/time.h>. + */ +/* SYSTIMEKERNEL + * This symbol is defined if the program should include <sys/time.h> + * with KERNEL defined. + */ +/* I_SYS_SELECT + * This symbol is defined if the program should include <sys/select.h>. + */ +#define I_TIME /**/ +/* #define I_SYS_TIME /**/ +/*#undef SYSTIMEKERNEL /**/ +/*#undef I_SYS_SELECT /**/ + +/* I_UTIME + * This symbol, if defined, indicates to the C program that it should + * include utime.h. + */ +/*#undef I_UTIME /**/ + +/* I_VARARGS + * This symbol, if defined, indicates to the C program that it should + * include varargs.h. + */ +#define I_VARARGS /**/ + +/* I_VFORK + * This symbol, if defined, indicates to the C program that it should + * include vfork.h. + */ +/* #define I_VFORK /**/ + +/* INTSIZE + * This symbol contains the size of an int, so that the C preprocessor + * can make decisions based on it. + */ +#ifdef __MSHORT__ +#define INTSIZE 2 /**/ +#else +#define INTSIZE 4 /**/ +#endif + +/* I_DIRENT + * This symbol, if defined, indicates that the program should use the + * P1003-style directory routines, and include <dirent.h>. + */ +/* I_SYS_DIR + * This symbol, if defined, indicates that the program should use the + * directory functions by including <sys/dir.h>. + */ +/* I_NDIR + * This symbol, if defined, indicates that the program should include the + * system's version of ndir.h, rather than the one with this package. + */ +/* I_SYS_NDIR + * This symbol, if defined, indicates that the program should include the + * system's version of sys/ndir.h, rather than the one with this package. + */ +/* I_MY_DIR + * This symbol, if defined, indicates that the program should compile + * the ndir.c code provided with the package. + */ +/* DIRNAMLEN + * This symbol, if defined, indicates to the C program that the length + * of directory entry names is provided by a d_namlen field. Otherwise + * you need to do strlen() on the d_name field. + */ +#define I_DIRENT /**/ +/*#undef I_SYS_DIR /**/ +/*#undef I_NDIR /**/ +/*#undef I_SYS_NDIR /**/ +/*#undef I_MY_DIR /**/ +/*#undef DIRNAMLEN /**/ + +/* MYMALLOC + * This symbol, if defined, indicates that we're using our own malloc. + */ +/* MALLOCPTRTYPE + * This symbol defines the kind of ptr returned by malloc and realloc. + */ +/* #define MYMALLOC /**/ +#define MALLOCPTRTYPE void /**/ + + + +/* RANDBITS + * This symbol contains the number of bits of random number the rand() + * function produces. Usual values are 15, 16, and 31. + */ +#ifdef __MSHORT__ +#define RANDBITS 15 /**/ +#else +#define RANDBITS 31 /**/ +#endif + +/* SCRIPTDIR + * This symbol holds the name of the directory in which the user wants + * to keep publicly executable scripts for the package in question. It + * is often a directory that is mounted across diverse architectures. + */ +#define SCRIPTDIR "/bin" /**/ + +/* SIG_NAME + * This symbol contains an list of signal names in order. + */ +#define SIG_NAME "NULL","HUP","INT","QUIT","ILL","TRAP","ABRT","PRIV","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","URG","STOP","TSTP","CONT","CHLD","TTIN","TTOU","IO","XCPU","XFSZ","VTALRM","PROF","WINCH","USR1","USR2" + +/* STDCHAR + * This symbol is defined to be the type of char used in stdio.h. + * It has the values "unsigned char" or "char". + */ +#define STDCHAR unsigned char /**/ + +/* UIDTYPE + * This symbol has a value like uid_t, int, ushort, or whatever type is + * used to declare user ids in the kernel. + */ +#define UIDTYPE uid_t /**/ + +/* VOIDHAVE + * This symbol indicates how much support of the void type is given by this + * compiler. What various bits mean: + * + * 1 = supports declaration of void + * 2 = supports arrays of pointers to functions returning void + * 4 = supports comparisons between pointers to void functions and + * addresses of void functions + * + * The package designer should define VOIDWANT to indicate the requirements + * of the package. This can be done either by #defining VOIDWANT before + * including config.h, or by defining voidwant in Myinit.U. If the level + * of void support necessary is not present, config.h defines void to "int", + * VOID to the empty string, and VOIDP to "char *". + */ +/* void + * This symbol is used for void casts. On implementations which support + * void appropriately, its value is "void". Otherwise, its value maps + * to "int". + */ +/* VOID + * This symbol's value is "void" if the implementation supports void + * appropriately. Otherwise, its value is the empty string. The primary + * use of this symbol is in specifying void parameter lists for function + * prototypes. + */ +/* VOIDP + * This symbol is used for casting generic pointers. On implementations + * which support void appropriately, its value is "void *". Otherwise, + * its value is "char *". + */ +#ifndef VOIDWANT +#define VOIDWANT 7 +#endif +#define VOIDHAVE 7 +#if (VOIDHAVE & VOIDWANT) != VOIDWANT +#define void int /* is void to be avoided? */ +#define VOID +#define VOIDP (char *) +#define M_VOID /* Xenix strikes again */ +#else +#define VOID void +#define VOIDP (void *) +#endif + +/* PRIVLIB + * This symbol contains the name of the private library for this package. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. The program + * should be prepared to do ~ expansion. + */ +/* #define PRIVLIB "/usr/lib/perl" /**/ +extern char *PRIVLIB; /* $PERLIB or /lib */ + +/* param.h does'nt really need types, but is #define'ed to make sure types.h + * is included + */ +#define PARAM_NEEDS_TYPES + +/* These are selective unix services in the gcc-st lib + */ +#define HAS_GETLOGIN +#define HAS_GETPPID +#define HAS_KILL +#define HAS_UMASK +#define HAS_PASSWD +#endif diff --git a/atarist/test/err b/atarist/test/err new file mode 100644 index 0000000000..cf32624c0f --- /dev/null +++ b/atarist/test/err @@ -0,0 +1,4 @@ +$! = 0 + 0; +print $!, "\n"; +$e = $! + 0; +print $e, "\n"; diff --git a/atarist/test/glob b/atarist/test/glob new file mode 100644 index 0000000000..c090c56b8e --- /dev/null +++ b/atarist/test/glob @@ -0,0 +1,4 @@ +while(<*.pl>) +{ + print $_, "\n"; +} diff --git a/config_h.SH b/config_h.SH index dc2281e503..03667bd546 100644 --- a/config_h.SH +++ b/config_h.SH @@ -41,6 +41,11 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' #$d_eunice EUNICE /**/ #$d_eunice VMS /**/ +/* LOC_SED + * This symbol holds the complete pathname to the sed program. + */ +#define LOC_SED "$sed" /**/ + /* ALIGNBYTES * This symbol contains the number of bytes required to align a double. * Usual values are 2, 4, and 8. @@ -84,8 +89,16 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' /* HAS_BCOPY * This symbol, if defined, indicates that the bcopy routine is available * to copy blocks of memory. Otherwise you should probably use memcpy(). + * If neither is defined, roll your own. + */ +/* SAFE_BCOPY + * This symbol, if defined, indicates that the bcopy routine is available + * to copy potentially overlapping copy blocks of bcopy. Otherwise you + * should probably use memmove() or memcpy(). If neither is defined, + * roll your own. */ #$d_bcopy HAS_BCOPY /**/ +#$d_safebcpy SAFE_BCOPY /**/ /* HAS_BZERO * This symbol, if defined, indicates that the bzero routine is available @@ -248,6 +261,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' #$d_index index strchr /* cultural */ #$d_index rindex strrchr /* differences? */ +/* HAS_ISASCII + * This symbol, if defined, indicates that the isascii routine is available + * to test characters for asciiness. + */ +#$d_isascii HAS_ISASCII /**/ + /* HAS_KILLPG * This symbol, if defined, indicates that the killpg routine is available * to kill process groups. If unavailable, you probably should use kill @@ -272,7 +291,27 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' * to copy blocks of memory. Otherwise you should probably use bcopy(). * If neither is defined, roll your own. */ +/* SAFE_MEMCPY + * This symbol, if defined, indicates that the memcpy routine is available + * to copy potentially overlapping copy blocks of memory. Otherwise you + * should probably use memmove() or bcopy(). If neither is defined, + * roll your own. + */ #$d_memcpy HAS_MEMCPY /**/ +#$d_safemcpy SAFE_MEMCPY /**/ + +/* HAS_MEMMOVE + * This symbol, if defined, indicates that the memmove routine is available + * to move potentially overlapping blocks of memory. Otherwise you + * should use bcopy() or roll your own. + */ +#$d_memmove HAS_MEMMOVE /**/ + +/* HAS_MEMSET + * This symbol, if defined, indicates that the memset routine is available + * to set a block of memory to a character. If undefined, roll your own. + */ +#$d_memset HAS_MEMSET /**/ /* HAS_MKDIR * This symbol, if defined, indicates that the mkdir routine is available @@ -289,25 +328,25 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' /* HAS_MSGCTL * This symbol, if defined, indicates that the msgctl() routine is - * available to stat symbolic links. + * available to control message passing. */ #$d_msgctl HAS_MSGCTL /**/ /* HAS_MSGGET * This symbol, if defined, indicates that the msgget() routine is - * available to stat symbolic links. + * available to get messages. */ #$d_msgget HAS_MSGGET /**/ /* HAS_MSGRCV * This symbol, if defined, indicates that the msgrcv() routine is - * available to stat symbolic links. + * available to receive messages. */ #$d_msgrcv HAS_MSGRCV /**/ /* HAS_MSGSND * This symbol, if defined, indicates that the msgsnd() routine is - * available to stat symbolic links. + * available to send messages. */ #$d_msgsnd HAS_MSGSND /**/ @@ -342,6 +381,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' */ #$d_rename HAS_RENAME /**/ +/* HAS_REWINDDIR + * This symbol, if defined, indicates that the rewindir routine is + * available to rewind directories. + */ +#$d_rewindir HAS_REWINDDIR /**/ + /* HAS_RMDIR * This symbol, if defined, indicates that the rmdir routine is available * to remove directories. Otherwise you should fork off a new process to @@ -349,6 +394,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' */ #$d_rmdir HAS_RMDIR /**/ +/* HAS_SEEKDIR + * This symbol, if defined, indicates that the seekdir routine is + * available to seek into directories. + */ +#$d_seekdir HAS_SEEKDIR /**/ + /* HAS_SELECT * This symbol, if defined, indicates that the select() subroutine * exists. @@ -363,19 +414,19 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' /* HAS_SEMCTL * This symbol, if defined, indicates that the semctl() routine is - * available to stat symbolic links. + * available to control semaphores. */ #$d_semctl HAS_SEMCTL /**/ /* HAS_SEMGET * This symbol, if defined, indicates that the semget() routine is - * available to stat symbolic links. + * available to get semaphores ids. */ #$d_semget HAS_SEMGET /**/ /* HAS_SEMOP * This symbol, if defined, indicates that the semop() routine is - * available to stat symbolic links. + * available to perform semaphore operations. */ #$d_semop HAS_SEMOP /**/ @@ -453,7 +504,7 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' /* HAS_SHMAT * This symbol, if defined, indicates that the shmat() routine is - * available to stat symbolic links. + * available to attach a shared memory segment. */ /* VOID_SHMAT * This symbol, if defined, indicates that the shmat() routine @@ -465,19 +516,19 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' /* HAS_SHMCTL * This symbol, if defined, indicates that the shmctl() routine is - * available to stat symbolic links. + * available to control a shared memory segment. */ #$d_shmctl HAS_SHMCTL /**/ /* HAS_SHMDT * This symbol, if defined, indicates that the shmdt() routine is - * available to stat symbolic links. + * available to detach a shared memory segment. */ #$d_shmdt HAS_SHMDT /**/ /* HAS_SHMGET * This symbol, if defined, indicates that the shmget() routine is - * available to stat symbolic links. + * available to get a shared memory segment id. */ #$d_shmget HAS_SHMGET /**/ @@ -536,6 +587,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!' */ #$d_syscall HAS_SYSCALL /**/ +/* HAS_TELLDIR + * This symbol, if defined, indicates that the telldir routine is + * available to tell your location in directories. + */ +#$d_telldir HAS_TELLDIR /**/ + /* HAS_TRUNCATE * This symbol, if defined, indicates that the truncate routine is * available to truncate files. diff --git a/hints/dgux.sh b/hints/dgux.sh new file mode 100644 index 0000000000..d0d115417a --- /dev/null +++ b/hints/dgux.sh @@ -0,0 +1,7 @@ +cppstdin='/lib/cpp' +gidtype='gid_t' +groupstype='gid_t' +libs='-ldgc' +uidtype='uid_t' +d_index='define' +cc='gcc' diff --git a/hints/dynix.sh b/hints/dynix.sh index 34bc1b938a..dca74b4381 100644 --- a/hints/dynix.sh +++ b/hints/dynix.sh @@ -1 +1,2 @@ d_castneg=undef +libswanted=`echo $libswanted | sed -e 's/socket /socket seq inet /'` diff --git a/os2/crypt.c b/os2/crypt.c new file mode 100644 index 0000000000..9f9b562c36 --- /dev/null +++ b/os2/crypt.c @@ -0,0 +1,276 @@ +/* From Andy Tanenbaum's book "Computer Networks", + rewritten in C +*/ + +struct block { + unsigned char b_data[64]; +}; + +struct ordering { + unsigned char o_data[64]; +}; + +static struct block key; + +static struct ordering InitialTr = { + 58,50,42,34,26,18,10, 2,60,52,44,36,28,20,12, 4, + 62,54,46,38,30,22,14, 6,64,56,48,40,32,24,16, 8, + 57,49,41,33,25,17, 9, 1,59,51,43,35,27,19,11, 3, + 61,53,45,37,29,21,13, 5,63,55,47,39,31,23,15, 7, +}; + +static struct ordering FinalTr = { + 40, 8,48,16,56,24,64,32,39, 7,47,15,55,23,63,31, + 38, 6,46,14,54,22,62,30,37, 5,45,13,53,21,61,29, + 36, 4,44,12,52,20,60,28,35, 3,43,11,51,19,59,27, + 34, 2,42,10,50,18,58,26,33, 1,41, 9,49,17,57,25, +}; + +static struct ordering swap = { + 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, + 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, +}; + +static struct ordering KeyTr1 = { + 57,49,41,33,25,17, 9, 1,58,50,42,34,26,18, + 10, 2,59,51,43,35,27,19,11, 3,60,52,44,36, + 63,55,47,39,31,23,15, 7,62,54,46,38,30,22, + 14, 6,61,53,45,37,29,21,13, 5,28,20,12, 4, +}; + +static struct ordering KeyTr2 = { + 14,17,11,24, 1, 5, 3,28,15, 6,21,10, + 23,19,12, 4,26, 8,16, 7,27,20,13, 2, + 41,52,31,37,47,55,30,40,51,45,33,48, + 44,49,39,56,34,53,46,42,50,36,29,32, +}; + +static struct ordering etr = { + 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, + 8, 9,10,11,12,13,12,13,14,15,16,17, + 16,17,18,19,20,21,20,21,22,23,24,25, + 24,25,26,27,28,29,28,29,30,31,32, 1, +}; + +static struct ordering ptr = { + 16, 7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10, + 2, 8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25, +}; + +static unsigned char s_boxes[8][64] = { +{ 14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7, + 0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8, + 4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0, + 15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13, +}, + +{ 15, 1, 8,14, 6,11, 3, 4, 9, 7, 2,13,12, 0, 5,10, + 3,13, 4, 7,15, 2, 8,14,12, 0, 1,10, 6, 9,11, 5, + 0,14, 7,11,10, 4,13, 1, 5, 8,12, 6, 9, 3, 2,15, + 13, 8,10, 1, 3,15, 4, 2,11, 6, 7,12, 0, 5,14, 9, +}, + +{ 10, 0, 9,14, 6, 3,15, 5, 1,13,12, 7,11, 4, 2, 8, + 13, 7, 0, 9, 3, 4, 6,10, 2, 8, 5,14,12,11,15, 1, + 13, 6, 4, 9, 8,15, 3, 0,11, 1, 2,12, 5,10,14, 7, + 1,10,13, 0, 6, 9, 8, 7, 4,15,14, 3,11, 5, 2,12, +}, + +{ 7,13,14, 3, 0, 6, 9,10, 1, 2, 8, 5,11,12, 4,15, + 13, 8,11, 5, 6,15, 0, 3, 4, 7, 2,12, 1,10,14, 9, + 10, 6, 9, 0,12,11, 7,13,15, 1, 3,14, 5, 2, 8, 4, + 3,15, 0, 6,10, 1,13, 8, 9, 4, 5,11,12, 7, 2,14, +}, + +{ 2,12, 4, 1, 7,10,11, 6, 8, 5, 3,15,13, 0,14, 9, + 14,11, 2,12, 4, 7,13, 1, 5, 0,15,10, 3, 9, 8, 6, + 4, 2, 1,11,10,13, 7, 8,15, 9,12, 5, 6, 3, 0,14, + 11, 8,12, 7, 1,14, 2,13, 6,15, 0, 9,10, 4, 5, 3, +}, + +{ 12, 1,10,15, 9, 2, 6, 8, 0,13, 3, 4,14, 7, 5,11, + 10,15, 4, 2, 7,12, 9, 5, 6, 1,13,14, 0,11, 3, 8, + 9,14,15, 5, 2, 8,12, 3, 7, 0, 4,10, 1,13,11, 6, + 4, 3, 2,12, 9, 5,15,10,11,14, 1, 7, 6, 0, 8,13, +}, + +{ 4,11, 2,14,15, 0, 8,13, 3,12, 9, 7, 5,10, 6, 1, + 13, 0,11, 7, 4, 9, 1,10,14, 3, 5,12, 2,15, 8, 6, + 1, 4,11,13,12, 3, 7,14,10,15, 6, 8, 0, 5, 9, 2, + 6,11,13, 8, 1, 4,10, 7, 9, 5, 0,15,14, 2, 3,12, +}, + +{ 13, 2, 8, 4, 6,15,11, 1,10, 9, 3,14, 5, 0,12, 7, + 1,15,13, 8,10, 3, 7, 4,12, 5, 6,11, 0,14, 9, 2, + 7,11, 4, 1, 9,12,14, 2, 0, 6,10,13,15, 3, 5, 8, + 2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11, +}, +}; + +static int rots[] = { + 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1, +}; + +static void transpose(struct block *data, struct ordering *t, int n) +{ + struct block x; + + x = *data; + + while (n-- > 0) { + data->b_data[n] = x.b_data[t->o_data[n] - 1]; + } +} + +static void rotate(struct block *key) +{ + register unsigned char *p = key->b_data; + register unsigned char *ep = &(key->b_data[55]); + int data0 = key->b_data[0], data28 = key->b_data[28]; + + while (p++ < ep) *(p-1) = *p; + key->b_data[27] = (char) data0; + key->b_data[55] = (char) data28; +} + +static struct ordering *EP = &etr; + +static void f(int i, struct block *key, struct block *a, struct block *x) +{ + struct block e, ikey, y; + int k; + register unsigned char *p, *q, *r; + + e = *a; + transpose(&e, EP, 48); + for (k = rots[i]; k; k--) rotate(key); + ikey = *key; + transpose(&ikey, &KeyTr2, 48); + p = &(y.b_data[48]); + q = &(e.b_data[48]); + r = &(ikey.b_data[48]); + while (p > y.b_data) { + *--p = *--q ^ *--r; + } + q = x->b_data; + for (k = 0; k < 8; k++) { + register int xb, r; + + r = *p++ << 5; + r += *p++ << 3; + r += *p++ << 2; + r += *p++ << 1; + r += *p++; + r += *p++ << 4; + + xb = s_boxes[k][r]; + + *q++ = (char) (xb >> 3) & 1; + *q++ = (char) (xb>>2) & 1; + *q++ = (char) (xb>>1) & 1; + *q++ = (char) (xb & 1); + } + transpose(x, &ptr, 32); +} + +void definekey(char *k) +{ + + key = *((struct block *) k); + transpose(&key, &KeyTr1, 56); +} + +void encrypt(char *blck, int edflag) +{ + register struct block *p = (struct block *) blck; + register int i; + + transpose(p, &InitialTr, 64); + for (i = 15; i>= 0; i--) { + int j = edflag ? i : 15 - i; + register int k; + struct block b, x; + + b = *p; + for (k = 31; k >= 0; k--) { + p->b_data[k] = b.b_data[k + 32]; + } + f(j, &key, p, &x); + for (k = 31; k >= 0; k--) { + p->b_data[k+32] = b.b_data[k] ^ x.b_data[k]; + } + } + transpose(p, &swap, 64); + transpose(p, &FinalTr, 64); +} + +char *crypt(char *pw, char *salt) +{ + + char pwb[66]; + static char result[16]; + register char *p = pwb; + struct ordering new_etr; + register int i; + + while (*pw && p < &pwb[64]) { + register int j = 7; + + while (j--) { + *p++ = (*pw >> j) & 01; + } + pw++; + *p++ = 0; + } + while (p < &pwb[64]) *p++ = 0; + + definekey(p = pwb); + + while (p < &pwb[66]) *p++ = 0; + + new_etr = etr; + EP = &new_etr; + for (i = 0; i < 2; i++) { + register char c = *salt++; + register int j; + + result[i] = c; + if ( c > 'Z') c -= 6 + 7 + '.'; /* c was a lower case letter */ + else if ( c > '9') c -= 7 + '.';/* c was upper case letter */ + else c -= '.'; /* c was digit, '.' or '/'. */ + /* now, 0 <= c <= 63 */ + for (j = 0; j < 6; j++) { + if ((c >> j) & 01) { + int t = 6*i + j; + int temp = new_etr.o_data[t]; + new_etr.o_data[t] = new_etr.o_data[t+24]; + new_etr.o_data[t+24] = (char) temp; + } + } + } + + if (result[1] == 0) result[1] = result[0]; + + for (i = 0; i < 25; i++) encrypt(pwb,0); + EP = &etr; + + p = pwb; + pw = result+2; + while (p < &pwb[66]) { + register int c = 0; + register int j = 6; + + while (j--) { + c <<= 1; + c |= *p++; + } + c += '.'; /* becomes >= '.' */ + if (c > '9') c += 7; /* not in [./0-9], becomes upper */ + if (c > 'Z') c += 6; /* not in [A-Z], becomes lower */ + *pw++ = (char) c; + } + *pw = 0; + return result; +} diff --git a/patchlevel.h b/patchlevel.h index 7c3da2cb8a..2627e90d71 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -1 +1 @@ -#define PATCHLEVEL 22 +#define PATCHLEVEL 23 diff --git a/t/op/dbm.t b/t/op/dbm.t index c31a2489c1..647d3efb71 100644 --- a/t/op/dbm.t +++ b/t/op/dbm.t @@ -1,8 +1,9 @@ #!./perl -# $Header: dbm.t,v 4.0 91/03/20 01:51:52 lwall Locked $ +# $RCSfile: dbm.t,v $$Revision: 4.0.1.1 $$Date: 92/06/08 15:43:02 $ -if (!-r '/usr/include/dbm.h' && !-r '/usr/include/ndbm.h') { +if (!-r '/usr/include/dbm.h' && !-r '/usr/include/ndbm.h' + && !-r '/usr/include/rpcsvc/dbm.h') { print "1..0\n"; exit; } diff --git a/usub/curses.mus b/usub/curses.mus index ce53a38834..ec1e60418d 100644 --- a/usub/curses.mus +++ b/usub/curses.mus @@ -1,6 +1,9 @@ -/* $RCSfile: curses.mus,v $$Revision: 4.0.1.1 $$Date: 91/11/05 19:06:19 $ +/* $RCSfile: curses.mus,v $$Revision: 4.0.1.2 $$Date: 92/06/08 16:06:12 $ * * $Log: curses.mus,v $ + * Revision 4.0.1.2 92/06/08 16:06:12 lwall + * patch20: function key support added to curses.mus + * * Revision 4.0.1.1 91/11/05 19:06:19 lwall * patch11: usub/curses.mus now supports SysV curses * @@ -518,7 +521,10 @@ END st[0] = &str_undef; else { retch = retval; - str_nset(st[0], &retch, 1); + if (retval > 0377) + str_numset(st[0], (double) retval); + else + str_nset(st[0], &retch, 1); } } return sp; @@ -536,7 +542,10 @@ END st[0] = &str_undef; else { retch = retval; - str_nset(st[0], &retch, 1); + if (retval > 0377) + str_numset(st[0], (double) retval); + else + str_nset(st[0], &retch, 1); } } return sp; |