PROGRAM LABSND C C C LINK WITH THIS COMMAND FILE C C C LABSND/CP/FP/SL,,= C LABSND C ,LB:[1,1]MURDLIB/LB C ,LB:[1,1]FOROTS/LB C / C TASK=...LAB C UNITS=15 C ACTFIL=6 C MAXBUF=512 C LIBR=FCSRES:RO C RESCOM=ACOM:RO C // C C C Labsnd is the command processor for resident program LABMON (...LMN). C Commands are received via RUN parameters , formatted and sent C to ...LMN in the following form. C C INPUT SENT DESCRIPTION C ----- ---- ----------- C lab/SHow SH Show information C lab/SEt xx.xxx SE y Set sampling time of xx.xxx secs C to an IPRSET of y. C lab/DI DI Set A/D to 8 chan differential. C lab/SI SI Set A/D to 16 chan single ended C LOGICAL SETFLG,MAP(16),ICH,IT,DIFLG INTEGER*4 I4 INTEGER TAB1(4),IC,SER(8),OFSPR(2),ITYP BYTE CMDI(80),CMDO(26),IBL,TAB2(8),RBUF(30),CHAN(16),NME(6) REAL CLK(5) EQUIVALENCE (IC,CMDO),(IP,CMDO(5)),(ITIM,RBUF(11)),(ICH,RBUF(9)) EQUIVALENCE (ICLK,RBUF(13)),(ITYP,RBUF(15)) DATA CLK/1000000.,100000.,10000.,1000.,100./ DATA TAB1/'SH','SE','DI','SI'/,NCMDS/4/,IBL/' '/,SETFLG/.FALSE./ DATA TAB2/'@','O','W','@','T','@','@','@'/ DATA MAP/1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192, 1 16384,"100000/ DATA OFSPR/3R...,3RLMN/ DATA DIFLG/.FALSE./ C C C CALL STFILL(CMDO,26,IBL) ! CALL STFILL(CMDI,80,IBL) ! Blank fill cmd input buff CALL GETMCR(CMDI,IER) ! Pass cmd CALL CNVTUC(80,CMDI) ! To upper case C GOTO 20 10 TYPE 6000 6000 FORMAT('0Command Error ') GOTO 150 C C Process Command C 20 DO 30 I=1,NCMDS !Search for command CALL STFIND(TAB1(I),2,CMDI(4),80,IPT,IER) IF(IER.EQ.0)GOTO 40 30 CONTINUE GOTO 10 40 IPT=IPT+5 ICMD=I IC=TAB1(ICMD) !Command to send buf CMDO(3)=' ' IF(CMDI(IPT).EQ.' '.OR.CMDI(IPT).EQ."15)GOTO 70 I=0 DO 50 J=1,ICMD !Find trailing cmd bytes 45 I=I+1 IF(TAB2(I).NE.'@')GOTO 45 50 CONTINUE I=I+1 60 IF(CMDI(IPT).EQ.' '.OR.CMDI(IPT).EQ."15)GOTO 70 IF(CMDI(IPT).NE.TAB2(I))GOTO 10 IPT=IPT+1 I=I+1 IF(TAB2(I).NE.'@')GOTO 60 IF(CMDI(IPT).NE.' '.AND.CMDI(IPT).NE."15)GOTO 10 C C Found command - go to its service routine C 70 GOTO(200,300,400,500)ICMD C C SHOW service routine C 200 CALL REQUES(OFSPR) CALL SEND(OFSPR,CMDO,33,SER) !Send SH to offspring IF(SETFLG)GOTO 210 TYPE 6020 6020 FORMAT('0ACTIVE-PROGRAMS CHANNELS SAMPLE-TIME') 210 CALL RCST(,RBUF,IER) !Prepare for for reply IF(IER.EQ.2)CALL RCST(,RBUF) X=ITIM CLOCK=CLK(ICLK) TIME=(0.-X)/CLOCK !Calculate sample time IF(ITYP.EQ.'DI')DIFLG=.TRUE. IF(RBUF(5).EQ.0)GOTO 240 J=0 DO 230 I=1,16 !Unscramble channel map CHAN(I)=' ' IT=ICH.AND.MAP(I) IF(IT.EQ.0)GOTO 230 J=J+1 I4=I-1 CALL BINASC(I4,1,16,CHAN(J)) 230 CONTINUE CALL R50ASC(6,RBUF(5),NME) IF(SETFLG)GOTO 235 DO 233 I=1,6 233 IF(NME(I).EQ.0)NME(I)=' ' TYPE 6030,NME,CHAN,TIME 6030 FORMAT(1X,6A1,11X,16A1,2X,F6.3,' secs') 235 CALL EMST(OSPR,1) GOTO 210 240 IF(SETFLG)GOTO 340 TYPE 6040,TIME 6040 FORMAT(36X,F6.3,' secs',/) IF(DIFLG)GOTO 202 TYPE 6010 GOTO 205 202 TYPE 6005 6005 FORMAT('0Sampling type = DIFFERENTIAL') 6010 FORMAT('0Sampling type = SINGLE ENDED') 205 CALL EXIT C C SET time handler C 300 DO 310,I=1,5 !Skip blanks IPT=IPT+1 IF(CMDI(IPT).NE.' ')GOTO 320 310 CONTINUE GOTO 10 320 DO 330 I=IPT,IPT+7 IF(CMDI(I).EQ."15.OR.CMDI(I).EQ.0)CMDI(I)=IBL 330 CONTINUE DECODE(6,6100,CMDI(IPT))TIM !Seconds to F.P. 6100 FORMAT(F6.3) SETFLG=.TRUE. CMDO(2)='H' GOTO 200 !Get clock rate 340 CMDO(2)='E' X=0.-(CLOCK*TIM) !calc iprset IP=X 360 CALL REQUES(OSPR) CALL CNCT(OFSPR,1,,SER) CALL SEND(OFSPR,CMDO,33) !Send to offspring CALL WAITFR(1) IF(SER(1).NE.0)CALL ERRA(SER) CALL EXIT 150 STOP 13 C C Set A/D to 8 chan differential C 400 SETFLG=.TRUE. GOTO 360 C C Set A/D to 16 chan single ended C 500 SETFLG=.TRUE. GOTO 360 END C C C SUBROUTINE ERRA(SER) C ERROR RETURNS C C 1 - Requested task active (for RUN) C 2 - Requested task unknown. C 3 - Somthing obscure. C 4 - Invalid command. C 5 - Requested channels in use. C INTEGER SER(8) IF(SER(1).EQ.1)GOTO 12 IF(SER(1).EQ.2)GOTO 13 IF(SER(1).EQ.5)GOTO 14 IF(SER(1).EQ.6)GOTO 15 TYPE 6100 6100 FORMAT('0Bad Status from offspring') GOTO 150 12 TYPE 6101 6101 FORMAT('0Task already active OR unknown') GOTO 150 13 TYPE 6102 6102 FORMAT('0Task cannot be found') GOTO 150 14 TYPE 6103 6103 FORMAT('0Requested channels already in use') GOTO 150 15 TYPE 6104 6104 FORMAT('0Cannot set time while jobs are active') 150 STOP 23 END