home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / language / xlisp_21.zoo / unixstuff.c < prev    next >
C/C++ Source or Header  |  1990-02-28  |  3KB  |  160 lines

  1. /* uxstuff.c - minixST/unix specific routines */
  2. /* stolen from sttuff.c */
  3.  
  4. #include "xlisp.h"
  5. #include <signal.h>
  6.  
  7. /* external variables */
  8. extern LVAL s_unbound,true;
  9. extern int errno;
  10. extern FILE *tfp;
  11. static void (*old_handler)();
  12.  
  13. static void intr()
  14. {
  15.     xltoplevel();
  16. }
  17.  
  18. /* osinit - initialize */
  19. osinit(banner)
  20.   char *banner;
  21. {
  22.     fprintf(stderr, "%s\n",banner);
  23.     old_handler = signal(SIGINT, intr);
  24. }
  25.  
  26. /* osfinish - clean up before a return to the operating system */
  27. osfinish()
  28. {
  29.     signal(SIGINT, old_handler);
  30. }
  31.  
  32. /* oserror - print an error message */
  33. oserror(msg)
  34.   char *msg;
  35. {
  36.     fprintf(stderr, "error: %s\n",msg);
  37. }
  38.  
  39. /* osrand - return a random number between 0 and n-1 */
  40. int osrand(n)
  41.   int n;
  42. {
  43.     extern long rand();
  44.     return (rand() % n);
  45. }
  46.  
  47. /* osaopen - open an ascii file */
  48. FILE *osaopen(name,mode)
  49.   char *name,*mode;
  50. {
  51.     return (fopen(name,mode));
  52. }
  53.  
  54. /* osbopen - open a binary file */
  55. FILE *osbopen(name,mode)
  56.   char *name,*mode;
  57. {
  58.     return (fopen(name,mode));
  59. }
  60.  
  61. /* osclose - close a file */
  62. int osclose(fp)
  63.   FILE *fp;
  64. {
  65.     return (fclose(fp));
  66. }
  67.  
  68. /* osagetc - get a character from an ascii file */
  69. int osagetc(fp)
  70.   FILE *fp;
  71. {
  72.     return (getc(fp));
  73. }
  74.  
  75. /* osaputc - put a character to an ascii file */
  76. int osaputc(ch,fp)
  77.   int ch; FILE *fp;
  78. {
  79.     return (putc(ch,fp));
  80. }
  81.  
  82. /* osbgetc - get a character from a binary file */
  83. int osbgetc(fp)
  84.   FILE *fp;
  85. {
  86.     return (getc(fp));
  87. }
  88.  
  89. /* osbputc - put a character to a binary file */
  90. int osbputc(ch,fp)
  91.   int ch; FILE *fp;
  92. {
  93.     return (putc(ch,fp));
  94. }
  95.  
  96.  
  97. /* ostgetc - get a character from the terminal */
  98. int ostgetc()
  99. {
  100.     return(getchar());
  101. }
  102.  
  103. /* ostputc - put a character to the terminal */
  104. ostputc(ch)
  105.   int ch;
  106. {
  107.     putchar(ch);
  108.  
  109.    /* output the character to the transcript file */
  110.    if (tfp)
  111.     putc(ch,tfp);
  112. }
  113.  
  114. /* oscheck - check for control characters during execution */
  115. oscheck()
  116. {
  117. }
  118.  
  119. /* osflush - flush the input line buffer */
  120. osflush()
  121. {
  122.     fflush(stdin);
  123. }
  124.  
  125. /* xsystem - the built-in function 'system' */
  126. LVAL xsystem()
  127. {
  128.     char *cmd = "";
  129.     if (moreargs())
  130.     cmd = (char *)getstring(xlgastring());
  131.     xllastarg();
  132.     return (system(cmd) == 0 ? true : cvfixnum((FIXTYPE)errno));
  133. }
  134.  
  135. /* ossymbols - lookup important symbols */
  136. ossymbols()
  137. {
  138. }
  139.  
  140. #include <sgtty.h>
  141.  
  142. /* xgetkey - get a key from the keyboard */
  143. LVAL xgetkey()
  144. {
  145.     struct sgttyb s;
  146.     char c;
  147.     int i = fileno(stdin);
  148.  
  149.     gtty(i, &s);
  150.     s.sg_flags |= RAW;
  151.     s.sg_flags &= ~ECHO;
  152.     stty(i, &s);
  153.     read(i, &c, 1);
  154.     s.sg_flags &= ~RAW;
  155.     s.sg_flags |= ECHO;
  156.     stty(i, &s);
  157.     xllastarg();
  158.     return (cvfixnum((FIXTYPE)c));
  159. }
  160.