;SETSTS.SBR
;
; Copyright (C) 1994 by Jeff Kreider, Consultant
;
; Provided "as is" for use by AMUS members for any purpose except
; for resale. For conditions of resale, contact:
;
; Jeff Kreider, Consultant
; 210 N. Iris Ave
; Rialto, CA 92376-5727
; (909) 874-6214
;
; Permission for resale will be granted only in writting.
;
;This routine assembles on 2.x systems and the resulting SBR will run on
; any system 1.3B or later. It will not assemble properly on the 1.x
; O/S, however, due the the length of some of the symbol names. The
; can not be longer than 6 characters on the 1.x O/S
;
;Sample set up and usage within AlphaBASIC:
;
;MAP1 SET'STATUS
; MAP2 SET'RADIX,B,1,1
; MAP2 SET'ECHO,B,1,2
; MAP2 SET'DSKERR,B,1,3
; MAP2 SET'VERIFY,B,1,4
; MAP2 SET'GUARD,B,1,5
; MAP2 SET'CTRLC,B,1,6
; MAP2 SET'DIRECT,B,1,7
; MAP2 SET'LOCK,B,1,8
; MAP2 SET'RESULT,B,1 ! Returns -1 for formating error
; ! good results depend on call
; ! RADIX 0 = OCTAL
; ! 1 = HEX
; ! ECHO 0 = ECHO
; ! 1 = NOECHO
; ! THE REST
; ! 0 = NOT SET
; ! 1 = SET
;
;XCALL SETSTS,SET'ECHO,SET'RESULT
;IF SET'RESULT<0 PRINT "ERROR IN FORMAT" : END
;IF SET'RESULT = 0 THEN &
; PRINT "ECHO IS SET" &
; ELSE &
; PRINT "NOECHO IS SET"
;
;END
;
SEARCH SYS
SEARCH SYSSYM
SEARCH TRM
OBJNAM 0,0,[SBR] ; change to XBR for BASIC Plus
; or COMPLP with /S option
;
; AlphaBASIC XCALL argument block format
;
OFINI
OFDEF XC.ARG,2 ; number of args
OFDEF XC.TYP1,2 ; 1 type
OFDEF XC.ADR1,4 ; 1 address
OFDEF XC.SIZ1,4 ; 1 size
OFDEF XC.TYP2,2 ; 2 type
OFDEF XC.ADR2,4 ; 2 address
OFDEF XC.SIZ2,4 ; 2 size
OFSIZ XC.SIZ ; size of list
XC$UNF=0 ; symbol for unformatted
XC$STR=2 ; symbol for string
XC$FLT=4 ; symbol for floating point
XC$BIN=6 ; symbol for binary
;
;
VMAJOR=1
VMINOR=0
VSUB=0
VEDIT=100.
PHDR -1,PV$RSM,PH$REU!PH$REE
SETSTS: CMPW XC.ARG(A3),#2 ; enough args?
JEQ 10$ ; yes
TYPECR <?Insufficient arguments passed to SETSTS.SBR>
EXIT
10$: CMPW XC.TYP1(A3),#XC$BIN ; is parm a binary?
JEQ 20$ ; yes
15$: TYPECR <?Wrong variable type in SETSTS.SBR>
EXIT
20$: CMPW XC.TYP2(A3),#XC$BIN ; is second parm a binary?
JNE 15$ ; no
CMP XC.SIZ1(A3),#1 ; one byte?
JEQ 30$ ; yep
25$: TYPECR <?Wrong size of variable in SETSTS.SBR>
EXIT
30$: CMP XC.SIZ2(A3),#1 ; size check on second
JNE 25$ ; oops
MOV XC.ADR1(A3),A1 ; get request var
MOV XC.ADR2(A3),A2 ; get return var
CLRB @A2 ; set default
CLR D0 ; clear upper bits on request
CLR D2 ; clear upper bits on jobtyp
JOBIDX ; get JCB
MOVW JOBTYP(A6),D2 ; get job type
MOVB @A1,D0 ; get request
CMPB D0,#1 ; radix?
JEQ RADIX ; yes
CMPB D0,#2 ; echoing?
JEQ ECHO ; yes
CMPB D0,#3 ; dskerr?
JEQ DSKERR ; yes
CMPB D0,#4 ; verify?
JEQ VERIFY ; yes
CMPB D0,#5 ; guard?
JEQ GUARD ; yes
CMPB D0,#6 ; ctrlc?
JEQ CTRLC ; yes
CMPB D0,#7 ; redirection?
JEQ DIRECT ; yes
CMPB D0,#8. ; locking
JEQ LOCKING ; yes
MOVB #-1,@A2 ; format error
EXIT: RTN ; return to basic
EXIT2: MOVB #1,@A2 ;
RTN
RADIX: ANDW #J.HEX,D2 ; is hex set?
JEQ EXIT ; no, is octal (default)
JMP EXIT2 ; yes
ECHO: CLR D2 ; get rid of status
TRMRST D2 ; get terminal status word
ANDW #T$ECS,D2 ; echo suppressed?
JEQ EXIT ; no, ECHO is SET
JMP EXIT2 ; yes
DSKERR: ANDW #J.DER,D2 ; is DSKERR SET?
JEQ EXIT ; no
JMP EXIT2 ; yes
VERIFY: ANDW #J.VER,D2 ; is VERIFY SET?
JEQ EXIT ; no
JMP EXIT2 ; yes
GUARD: ANDW #J.GRD,D2 ; is GUARD SET?
JEQ EXIT ; no
JMP EXIT2 ; yes
CTRLC: ANDW #J.CCA,D2 ; is CTRLC SET?
JEQ EXIT ; no
JMP EXIT2 ; yes
;
;SET REDIRECTION and SET LOCK are supported only on 2.2 and later
; This routine checks only that the O/S supports 2.0 and later.
; If used on 2.x system prior to 2.2, these options will probably
; return a NOT SET condition.
;
DIRECT: MOV SYSTEM,D7 ; get system bit
AND #SY$EXD,D7 ; 2.x?
JNE 10$ ; yes, valid call
MOVB #-1,@A2 ; not valid call
JMP EXIT
10$: MOVW JOBTY2(A6),D2 ; Get second job type
ANDW #J2$RED,D2 ; redirection set?
JEQ EXIT ; no
JMP EXIT2 ; yes
LOCKING:
MOV SYSTEM,D7 ; get system bit
AND #SY$EXD,D7 ; 2.x?
JNE 10$ ; yes, valid call
MOVB #-1,@A2 ; not valid call
JMP EXIT
10$: ANDW #J.NLK,D2 ; locking set?
JNE EXIT ; yes
JMP EXIT2 ; no