;*************************** AMUS Program Label ******************************
; Filename: JOBCMD.M68/JOBCMD.SBR                           Date: 05/24/91
; Category: UTIL         Hash Code: 777-511-407-763      Version: 1.0(100)
; Initials: ULTR/US      Name: DAVID PALLMANN
; Company: ULTRASOFT CORPORATION                   Telephone #: 5163484848
; Related Files:
; Min. Op. Sys.: AMOSL 1.3B/AMOS32 1.0         Expertise Level: INT
; Special: Useful for trapping access to AMOS command level
; Description: Allows setting/clearing of JOBCMD field in Job Control Block
!*****************************************************************************

;****************************************************************************
;*                                                                          *
;*                               JOBCMD.SBR                                 *
;*          Lets an AlphaBASIC program set or clear JOBCMD field            *
;*                                                                          *
;****************************************************************************
;Copyright (C) 1991 UltraSoft Corporation.  All Rights REserved.
;
;Written by: David Pallmann
;
;Usage: XCALL JOBCMD, command$
;
;Where: <command$> is the 1-19 character AMOS command to set, or a null string
;       ("") to clear the JOBCMD field.
;
;Examples: XCALL JOBCMD, "LOGOUT"
;          XCALL JOBCMD, ""

       VMAJOR  =1
       VMINOR  =0
       VSUB    =0
       VEDIT   =100.
       VWHO    =0

       OBJNAM  .SBR

       SEARCH  SYS
       SEARCH  SYSSYM

       .OFINI
       .OFDEF  X.ARGS, 2
       .OFDEF  X.TYP1, 2
       .OFDEF  X.ADR1, 4
       .OFDEF  X.SIZ1, 4

START:  PHDR    -1,0,PH$REE!PH$REU      ; program header

CHECK:  CMPW    X.ARGS(A3),#1           ; 1 argument supplied?
       JNE     CNTERR                  ;   no - error
       MOV     X.SIZ1(A3),D0           ; get size of argument
       JEQ     CLEAR                   ;   zero - clear JOBCMD field

;set JOBCMD field

SET:    JOBIDX  A0                      ; index job control block
       LEA     A1,JOBCMD(A0)           ; index job command field
       MOV     X.ADR1(A3),A2           ; index user argument
       MOV     #19.,D2                 ; set loop count

COPY:   MOVB    (A2)+,D1                ; get character
       BEQ     TERM                    ;   end of string
       MOVB    D1,(A1)+                ; copy character
       DEC     D2                      ; decrement field size count
       BEQ     TERM2                   ;   filled
       SOB     D0,COPY                 ; loop unless end of user argument

TERM:   CLRB    (A1)+                   ; clear remainder
       SOB     D2,TERM                 ;   of JOBCMD field

TERM2:  CLRB    @A1                     ; terminate JOBCMD field
       RTN                             ; return to BASIC program

;clear JOBCMD field

CLEAR:  JOBIDX  A0                      ;
       LEA     A1,JOBCMD(A0)           ;
       MOV     #20.,D0                 ;
10$:    CLRB    (A1)+                   ;
       SOB     D0,10$                  ;
       RTN                             ; return to BASIC program

CNTERR: TYPECR  ?Argument count error in JOBCMD.SBR
       RTN                             ;

       END