home *** CD-ROM | disk | FTP | other *** search
- /* asstuff.c - Amiga specific routines */
-
- #include "xlisp.h"
-
- #ifndef MANX
- #define agetc getc /* Not sure if this will work in all cases (fnf) */
- #define aputc putc /* Not sure if this will work in all cases (fnf) */
- #endif
-
- #define LBSIZE 200
-
- /* external routines */
- extern double ran();
-
- /* external variables */
- extern LVAL s_unbound,true;
- extern int prompt;
- extern int errno;
-
- /* line buffer variables */
- static char lbuf[LBSIZE];
- static int lpos[LBSIZE];
- static int lindex;
- static int lcount;
- static int lposition;
-
- #define NEW 1006
- static long xlispwindow;
- extern FILE *tfp;
-
- /* osinit - initialize */
- osinit(banner)
- char *banner;
- {
- /* rouaix extern int Enable_Abort; */
-
- /* Enable_Abort = 0; Turn off ^C interrupt in case it's on */
- xlispwindow = Open("RAW:1/1/639/199/Xlisp by David Betz", NEW);
- while (*banner != '\000') {
- xputc (*banner++);
- }
- xputc ('\n');
- lposition = 0;
- lindex = 0;
- lcount = 0;
- }
-
- osfinish ()
- {
- Close (xlispwindow);
- }
-
- /* osrand - return a random number between 0 and n-1 */
- int osrand(n)
- int n;
- {
- n = (int)(ran() * (double)n);
- return (n < 0 ? -n : n);
- }
-
-
-
- /* oscheck - check for control characters during execution */
- oscheck()
- {
- int ch;
- if (ch = xcheck())
- switch (ch) {
- case '\002': osflush(); xlbreak("BREAK",s_unbound); break;
- case '\004': osflush(); xltoplevel(); break;
- }
- }
-
- /* osflush - flush the input line buffer */
- osflush()
- {
- lindex = lcount = 0;
- }
-
- /* xgetc - get a character from the terminal without echo */
- static int xgetc()
- {
- char ch;
-
- Read (xlispwindow, &ch, 1);
- return (ch & 0xFF);
- }
-
- /* xputc - put a character to the terminal */
- static xputc(ch)
- int ch;
- {
- char chout;
-
- chout = ch;
- Write (xlispwindow, &chout, 1L);
- }
-
- /* xcheck - check for a character */
- static int xcheck()
- {
- if (WaitForChar (xlispwindow, 0L) == 0L)
- return (0);
- return (xgetc() & 0xFF);
- }
-
-
-
- double ran () /* Just punt for now, not in Manx C; FIXME!!*/
- {
- static long seed = 654321;
- long lval;
- double dval;
-
- seed *= ((8 * (123456) - 3));
- lval = seed & 0xFFFF;
- dval = ((double) lval) / ((double) (0x10000));
- return (dval);
- }
-
-
-
-
-
-
-
- /* ADDED FOR V2.0 */
- /* osclose - close a file */
- int osclose(fp)
- FILE *fp;
- {
- return (fclose(fp));
- }
-
- /* ostputc - put a character to the terminal */
- ostputc(ch)
- int ch;
- {
- /* check for control characters */
- oscheck();
-
- /* output the character */
- if (ch == '\n') {
- xputc('\r'); xputc('\n');
- lposition = 0;
- }
- else {
- xputc(ch);
- lposition++;
- }
-
- /* output the character to the transcript file */
- if (tfp)
- osaputc(ch,tfp);
- }
- /* ostgetc - get a character from the terminal */
- int ostgetc()
- {
- int ch;
-
- /* check for a buffered character */
- if (lcount--)
- return (lbuf[lindex++]);
-
- /* get an input line */
- for (lcount = 0; ; )
- switch (ch = xgetc()) {
- case '\r':
- lbuf[lcount++] = '\n';
- xputc('\r'); xputc('\n'); lposition = 0;
- if (tfp)
- for (lindex = 0; lindex < lcount; ++lindex)
- osaputc(lbuf[lindex],tfp);
- lindex = 0; lcount--;
- return (lbuf[lindex++]);
- case '\010':
- case '\177':
- if (lcount) {
- lcount--;
- while (lposition > lpos[lcount]) {
- xputc('\010'); xputc(' '); xputc('\010');
- lposition--;
- }
- }
- break;
- case '\032':
- xflush();
- return (EOF);
- default:
- if (ch == '\t' || (ch >= 0x20 && ch < 0x7F)) {
- lbuf[lcount] = ch;
- lpos[lcount] = lposition;
- if (ch == '\t')
- do {
- xputc(' ');
- } while (++lposition & 7);
- else {
- xputc(ch); lposition++;
- }
- lcount++;
- }
- else {
- xflush();
- switch (ch) {
- case '\003': xltoplevel(); /* control-c */
- case '\007': xlcleanup(); /* control-g */
- case '\020': xlcontinue(); /* control-p */
- case '\032': return (EOF); /* control-z */
- default: return (ch);
- }
- }
- }
- }
- /* xflush - flush the input line buffer */
- static xflush()
- {
- ostputc('\n');
- osflush();
- }
-
- /* osaopen - open an ascii file */
- FILE *osaopen(name,mode)
- char *name,*mode;
- {
- return (fopen(name,mode));
- }
- /* oserror - print an error message */
- oserror(msg)
- char *msg;
- {
- printf("error: %s\n",msg);
- }
-
- /* xsystem - the built-in function 'system' */
- LVAL xsystem()
- {
- char *str;
- int result;
-
- /* get the command string */
- str = getstring(xlgastring());
- xllastarg();
- result = Execute(str,0L,xlispwindow);
- return (cvfixnum((FIXTYPE)result));
- }
-
- /* osagetc - get a character from an ascii file */
- int osagetc(fp)
- FILE *fp;
- {
- return (getc(fp));
- }
- /* osaputc - put a character to an ascii file */
- int osaputc(ch,fp)
- int ch; FILE *fp;
- {
- return (putc(ch,fp));
- }
- /* ossymbols - lookup important symbols */
- ossymbols()
- {
- }
-
-