home *** CD-ROM | disk | FTP | other *** search
- Subject: v07i078: A BASIC Interpreter, Part06/06
- Newsgroups: mod.sources
- Approved: mirror!rs
-
- Submitted by: phil@Cs.Ucl.AC.UK
- Mod.sources: Volume 7, Issue 78
- Archive-name: basic/Part06
-
- # Shar file shar06 (of 6)
- #
- # This is a shell archive containing the following files :-
- # pyramid/conf.h
- # pyramid/term.c
- # vax/Makefile
- # vax/as.s
- # vax/asm.sed
- # vax/conf.h
- # vax/term.c
- # ------------------------------
- # This is a shell archive, shar, format file.
- # To unarchive, feed this text into /bin/sh in the directory
- # you wish the files to be in.
-
- echo x - pyramid/conf.h 1>&2
- sed 's/^X//' > pyramid/conf.h << 'End of pyramid/conf.h'
- X/*
- X * BASIC by Phil Cockcroft
- X */
- X/*
- X * configuration file for pyramid systems (BSD unix only)
- X */
- X
- X/*
- X * memory sizes.
- X */
- X
- X#define MAXMEM (memp)1000000 /* max amount of memory */
- X#define MEMINC 8191 /* sizeof memory increments -1 */
- X
- X/*
- X * various options
- X */
- X
- X#define V7 /* must be defined */
- X#define BERK /* must be defined */
- X#define UCB_NTTY /* must be defined */
- X#define LKEYWORDS
- X#define LNAMES
- X#define RENUMB
- X#define SCOMMS
- X#define VFORK
- X#define BLOCKSIZ 1024
- X#define BSD42
- X#define ALIGN4
- X#define MPORTABLE
- X#define PORTABLE
- X
- X/*
- X * terminal dependent stuff
- X */
- X
- X#define CTRLINT 03 /* sig int control c */
- X#define CTRLQUIT 034 /* sig quit FS */
- X#define DEFPAGE 80 /* default terminal width */
- X#define DEFLENGTH 24 /* default number of lines on screen */
- X
- X/* #define VAX_ASSEM */ /* if you want to use assembler in various routines*/
- X /* this only works for the vax */
- X
- X/* #define NOEDIT /* define if don't want editing ever ! */
- X /* NB basic -e will still turn on editing */
- X /* basic -x will still turn off editing */
- X
- X/* #define LKEYWORDS /* define this if you want to have variable names which*/
- X /* contain commands this is like the later versions of */
- X /* microsoft but not like the orignal version */
- X /* it wastes more space since you have to have some */
- X /* spaces in to distinguish keywords */
- X
- X/* #define RENUMB /* define if you want to put the code for renumbering */
- X /* in. It works but is very wasteful of space. If you */
- X /* are short of space then don't use it. */
- X
- X/* #define LNAMES /* define if you want long variables names. This only */
- X /* slows it down by a small fraction */
- X
- X/* #define _BLOCKED /* This is a switch to allow block mode files */
- X /* don't define it here look below for where it is done*/
- X /* in the file handling bits */
- X
- X/* #define BSD42 /* if useing a 4.2 system */
- X
- X/* #define SCOMMS /* to allow shortened command names e.g. l. -> list */
- X /* this might cause some problems with overwriting of */
- X /* core but I think they have all been solved */
- X/* #define VFORK /* if your system supports vfork() */
- End of pyramid/conf.h
- chmod u=rw-,g=r,o=r pyramid/conf.h
- echo x - pyramid/term.c 1>&2
- sed 's/^X//' > pyramid/term.c << 'End of pyramid/term.c'
- X/*
- X * BASIC by Phil Cockcroft
- X */
- X/*
- X * machine dependent terminal info
- X */
- X
- X#include "pyramid/conf.h"
- X#include <sgtty.h>
- X
- X#ifndef SCOPE
- X#define SCOPE 0
- X#endif
- X
- Xstruct sgttyb nsttyb, osttyb;
- Xstruct tchars ntchr,otchr;
- X#ifdef UCB_NTTY
- Xstruct ltchars nltchr,oltchr;
- X#endif
- X
- Xextern int ter_width;
- Xextern char noedit;
- X
- Xstatic int got_mode;
- X
- Xsetu_term()
- X{
- X register i;
- X char *p, *getenv();
- X
- X ioctl(0,TIOCGETP,&osttyb);
- X ioctl(0,TIOCGETC,&otchr);
- X nsttyb = osttyb;
- X ntchr = otchr;
- X#ifdef TIOCSLPN
- X osttyb.sg_length = DEFLENGTH;
- X nsttyb.sg_length = 0;
- X if(ter_width <= 0)
- X ter_width = osttyb.sg_width & 0377;
- X osttyb.sg_width = DEFPAGE;
- X nsttyb.sg_width = 0;
- X#endif
- X ntchr.t_brkc = -1;
- X ntchr.t_eofc = -1;
- X ntchr.t_intrc = CTRLINT;
- X ntchr.t_quitc = CTRLQUIT;
- X if( (p = getenv("TERM")) && strcmp(p, "ucl7009") == 0){
- X ntchr.t_startc = -1;
- X ntchr.t_stopc = -1;
- X }
- X i = osttyb.sg_flags & ( LCASE | XTABS);
- X nsttyb.sg_flags = CBREAK | ANYP | i;
- X osttyb.sg_flags = ECHO | ANYP | CRMOD | SCOPE | i;
- X#ifdef UCB_NTTY
- X ioctl(0,TIOCGLTC,&oltchr);
- X nltchr = oltchr; /* is this needed ?? */
- X nltchr.t_suspc = -1;
- X nltchr.t_dsuspc = -1;
- X nltchr.t_rprntc = -1;
- X nltchr.t_flushc = -1;
- X nltchr.t_werasc = -1;
- X nltchr.t_lnextc = -1;
- X#endif
- X if(ter_width <= 0)
- X ter_width=DEFPAGE;
- X got_mode = 1;
- X}
- X
- Xset_term()
- X{
- X if(noedit || !got_mode)
- X return;
- X ioctl(0,TIOCSETN,&nsttyb);
- X ioctl(0,TIOCSETC,&ntchr);
- X#ifdef UCB_NTTY
- X ioctl(0,TIOCSLTC,&nltchr);
- X#endif
- X}
- X
- Xrset_term(type)
- X{
- X
- X if(noedit || !got_mode)
- X return;
- X#ifdef TIOCSLPN
- X if(type)
- X osttyb.sg_width = ter_width;
- X#endif
- X ioctl(0,TIOCSETN,&osttyb);
- X ioctl(0,TIOCSETC,&otchr);
- X#ifdef UCB_NTTY
- X ioctl(0,TIOCSLTC,&oltchr);
- X#endif
- X}
- End of pyramid/term.c
- chmod u=rw-,g=r,o=r pyramid/term.c
- echo x - vax/Makefile 1>&2
- sed 's/^X//' > vax/Makefile << 'End of vax/Makefile'
- X# Makefile for a vax
- X
- X# which cursor file we want.
- X# can be ucl or ukc
- XCURSOR = ucl
- X
- Xbasic: as.o bas1.o bas2.o bas3.o bas4.o bas5.o bas6.o bas7.o bas8.o \
- X bas9.o cursor.o termcap.o assist.o term.o
- X cc -O as.o bas1.o bas2.o bas3.o bas4.o bas5.o bas6.o bas7.o \
- X bas8.o bas9.o cursor.o termcap.o assist.o term.o -lm -ltermcap -o basic
- X
- Xclean:
- X rm -f *.o *.s cursor.c term.c
- X
- Xassist.o: bas.h assist.c
- X cc -O -c assist.c
- X
- Xtermcap.o: bas.h termcap.c cursor.c
- X cc -O -c termcap.c
- X
- Xcursor.c: cursor/cursor.c.${CURSOR}
- X cp cursor/cursor.c.${CURSOR} cursor.c
- X
- Xcursor.o: cursor.c
- X cc -O -c cursor.c
- X
- Xterm.o: term.c
- X cc -O -c term.c
- X
- Xterm.c: vax/term.c vax/conf.h
- X cp vax/term.c term.c
- X
- Xas.o: vax/as.s
- X cp vax/as.s as.s
- X cc -O -c as.s
- X rm as.s
- X
- X.c.o:
- X cc -O -S -DBSD42 $*.c
- X sed -f vax/asm.sed <$*.s | as -o $*.o
- X rm -f $*.s
- X
- Xbas.h: vax/conf.h
- X
- Xbas1.o: bas1.c bas.h
- Xbas2.o: bas2.c bas.h
- Xbas3.o: bas3.c bas.h
- Xbas4.o: bas4.c bas.h
- Xbas5.o: bas5.c bas.h
- Xbas6.o: bas6.c bas.h
- Xbas7.o: bas7.c bas.h
- Xbas7.c: cursor.c
- Xbas8.o: bas8.c bas.h
- Xbas9.o: bas9.c bas.h
- End of vax/Makefile
- chmod u=rw-,g=r,o=r vax/Makefile
- echo x - vax/as.s 1>&2
- sed 's/^X//' > vax/as.s << 'End of vax/as.s'
- X .text
- X .align 1
- X .globl _Getch
- X_Getch:
- X movl _point,r0
- XL190:
- X cmpb (r0)+,$32
- X beql L190
- X movl r0,_point
- X movzbl -(r0),r0
- X rsb
- X
- X .globl _Check
- X_Check:
- X movl _point,r1
- XL197:
- X cmpb (r1)+,$32
- X beql L197
- X movzbl -(r1),r0
- X beql L198
- X cmpb r0,$58
- X beql L198
- X cmpl r0,$233 # ELSE = 0351
- X bneq L199
- X tstb _elsecount
- X beql L199
- XL198:
- X movl r1,_point
- X rsb
- XL199:
- X pushl $1
- X calls $1,_error
- X # no return since _error does not return
- X
- X .globl __cleanup
- X .globl __exit
- X__cleanup:
- X pushl $0
- X calls $1,__exit
- X ret
- End of vax/as.s
- chmod u=rw-,g=r,o=r vax/as.s
- echo x - vax/asm.sed 1>&2
- sed 's/^X//' > vax/asm.sed << 'End of vax/asm.sed'
- Xs/calls $0,_getch$/jsb _Getch/
- Xs/calls $0,_check$/jsb _Check/
- Xs/calls r[0-9]*,_getch$/jsb _Getch/
- Xs/calls r[0-9]*,_check$/jsb _Check/
- End of vax/asm.sed
- chmod u=rw-,g=r,o=r vax/asm.sed
- echo x - vax/conf.h 1>&2
- sed 's/^X//' > vax/conf.h << 'End of vax/conf.h'
- X/*
- X * BASIC by Phil Cockcroft
- X */
- X/*
- X * configuration file for vax systems (BSD unix only)
- X */
- X
- X/*
- X * memory sizes.
- X */
- X
- X#define MAXMEM (memp)1000000 /* max amount of memory */
- X#define MEMINC 8191 /* sizeof memory increments -1 */
- X
- X/*
- X * various options
- X */
- X
- X#define V7 /* must be defined */
- X#define BERK /* must be defined */
- X#define UCB_NTTY /* must be defined */
- X#define LKEYWORDS
- X#define LNAMES
- X#define RENUMB
- X#define SCOMMS
- X#define VFORK
- X#define VAX_ASSEM
- X#define BLOCKSIZ 1024
- X
- X/*
- X * terminal dependent stuff
- X */
- X
- X#define CTRLINT 03 /* sig int control c */
- X#define CTRLQUIT 034 /* sig quit FS */
- X#define DEFPAGE 80 /* default terminal width */
- X#define DEFLENGTH 24 /* default number of lines on screen */
- X
- X/* #define VAX_ASSEM */ /* if you want to use assembler in various routines*/
- X /* this only works for the vax */
- X
- X/* #define NOEDIT /* define if don't want editing ever ! */
- X /* NB basic -e will still turn on editing */
- X /* basic -x will still turn off editing */
- X
- X/* #define LKEYWORDS /* define this if you want to have variable names which*/
- X /* contain commands this is like the later versions of */
- X /* microsoft but not like the orignal version */
- X /* it wastes more space since you have to have some */
- X /* spaces in to distinguish keywords */
- X
- X/* #define RENUMB /* define if you want to put the code for renumbering */
- X /* in. It works but is very wasteful of space. If you */
- X /* are short of space then don't use it. */
- X
- X/* #define LNAMES /* define if you want long variables names. This only */
- X /* slows it down by a small fraction */
- X
- X/* #define _BLOCKED /* This is a switch to allow block mode files */
- X /* don't define it here look below for where it is done*/
- X /* in the file handling bits */
- X
- X/* #define BSD42 /* if useing a 4.2 system */
- X
- X/* #define SCOMMS /* to allow shortened command names e.g. l. -> list */
- X /* this might cause some problems with overwriting of */
- X /* core but I think they have all been solved */
- X/* #define VFORK /* if your system supports vfork() */
- End of vax/conf.h
- chmod u=rw-,g=r,o=r vax/conf.h
- echo x - vax/term.c 1>&2
- sed 's/^X//' > vax/term.c << 'End of vax/term.c'
- X/*
- X * BASIC by Phil Cockcroft
- X */
- X/*
- X * machine dependent terminal info
- X */
- X
- X#include "vax/conf.h"
- X#include <sgtty.h>
- X
- X#ifndef SCOPE
- X#define SCOPE 0
- X#endif
- X
- Xstruct sgttyb nsttyb, osttyb;
- Xstruct tchars ntchr,otchr;
- X#ifdef UCB_NTTY
- Xstruct ltchars nltchr,oltchr;
- X#endif
- X
- Xextern int ter_width;
- Xextern char noedit;
- X
- Xstatic int got_mode;
- X
- Xsetu_term()
- X{
- X register i;
- X char *p, *getenv();
- X
- X ioctl(0,TIOCGETP,&osttyb);
- X ioctl(0,TIOCGETC,&otchr);
- X nsttyb = osttyb;
- X ntchr = otchr;
- X#ifdef TIOCSLPN
- X osttyb.sg_length = DEFLENGTH;
- X nsttyb.sg_length = 0;
- X if(ter_width <= 0)
- X ter_width = osttyb.sg_width & 0377;
- X osttyb.sg_width = DEFPAGE;
- X nsttyb.sg_width = 0;
- X#endif
- X ntchr.t_brkc = -1;
- X ntchr.t_eofc = -1;
- X ntchr.t_intrc = CTRLINT;
- X ntchr.t_quitc = CTRLQUIT;
- X if( (p = getenv("TERM")) && strcmp(p, "ucl7009") == 0){
- X ntchr.t_startc = -1;
- X ntchr.t_stopc = -1;
- X }
- X i = osttyb.sg_flags & ( LCASE | XTABS);
- X nsttyb.sg_flags = CBREAK | ANYP | i;
- X osttyb.sg_flags = ECHO | ANYP | CRMOD | SCOPE | i;
- X#ifdef UCB_NTTY
- X ioctl(0,TIOCGLTC,&oltchr);
- X nltchr = oltchr; /* is this needed ?? */
- X nltchr.t_suspc = -1;
- X nltchr.t_dsuspc = -1;
- X nltchr.t_rprntc = -1;
- X nltchr.t_flushc = -1;
- X nltchr.t_werasc = -1;
- X nltchr.t_lnextc = -1;
- X#endif
- X if(ter_width <= 0)
- X ter_width=DEFPAGE;
- X got_mode = 1;
- X}
- X
- Xset_term()
- X{
- X if(noedit || !got_mode)
- X return;
- X ioctl(0,TIOCSETN,&nsttyb);
- X ioctl(0,TIOCSETC,&ntchr);
- X#ifdef UCB_NTTY
- X ioctl(0,TIOCSLTC,&nltchr);
- X#endif
- X}
- X
- Xrset_term(type)
- X{
- X
- X if(noedit || !got_mode)
- X return;
- X#ifdef TIOCSLPN
- X if(type)
- X osttyb.sg_width = ter_width;
- X#endif
- X ioctl(0,TIOCSETN,&osttyb);
- X ioctl(0,TIOCSETC,&otchr);
- X#ifdef UCB_NTTY
- X ioctl(0,TIOCSLTC,&oltchr);
- X#endif
- X}
- End of vax/term.c
- chmod u=rw-,g=r,o=r vax/term.c
-