;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 END