SUBROUTINE KBYES C C KEYBOARD COMMAND ROUTINE C C THIS ROUTINE SERVICES ALL KEYBOARD COMMANDS C C BYTE IA(82) INTEGER*4 IZMIN,IZMAX,IXMIN,IXMAX,IYMIN,IYMAX PARAMETER NAMSIZ=31 COMMON /SCRAT/VALUE,VALUE1,VALUE2,VALUE3 INTEGER*2 ISTOP,ICOUNT,INAMF,INAM(NAMSIZ) COMMON /STATSC/ ISTOP,ICOUNT,IA COMMON /MSCAL/ XORG,XSC,YORG,YSC,IH,IXMIN,IXMAX,IYMIN, 1 IYMAX,IZMIN,IZMAX,IPLOT,IPAGE EQUIVALENCE (INAMF,IA) DATA INAM/ 'CU', 'EX', 'HS', 'ZE', 2 'TB' ,'IN','BL' ,'HI','PA', 3 'PR', 'BE','EN', 'RU', 'ST', 4 2,"35,"11,"12,"13,"10,"14,"33,"1,"27,"15,"35, 5 "137,"32,'PL','HE',"20/ IF(ICOUNT .LT. 0) CALL SSET ! If not set up do it now IF(IPLOT .NE. 2) GO TO 2 !IF NOT REPEAT PLOT DO REGULAR INPUT IF(ABS(SECNDS(CTIME)) .LT. 10.) GO TO 2 !NOT ENOUGH TIME ELAPSED IF(ITERM .NE. 0) CALL DIS2B(-100,0,0,0,0,0,0) ! UPDATE HIST CTIME = SECNDS(0.) ! Save time 2 IF(ICOUNT .LE. 0)RETURN CALL SCTEST(ITERM) ! Get graphics terminal type J = ICHAR C "2 GO TO 240 'cntl B' BLOW UP HIST C "10 GO TO 298 'cntrl H' (backspace) Previous color page C "11 GO TO 220 'cntrl I' (tab) Set markers by cursor C "12 GO TO 289 'LF' PLOT HIST + 1 C "13 GO TO 288 'VT' PLOT HIST - 1 C "14 GO TO 299 'cntrl L' (form feed) Next color page C "15 GO TO 301 'cntrl M' or 'return' Repeat color page C "16 GO TO 315 'cntrl N' Output hist (print format) C "1 'cntrl A' SETS UP TO REPLOT HISTS Again C "27 GO TO 210 'cntrl W' MARKER PRINT C "32 GO TO 400 'cntrl Z' Print message when disconnected C "33 GO TO 120 'escape' Erase screen C "35 GO TO 287 'cntrl =' Replot hist with new auto scale C "36 GO TO 291 'home' Replot current histogram same scale ISTN = 0 IA(ICOUNT+1) = 0 IF(ICOUNT .LE. 1) GO TO 90 DO 10 I = 1,ICOUNT IF(IA(I) .GT. "137) IA(I) = IA(I) - "40 ! Convert to upper case 10 CONTINUE DO 20 J=ICOUNT+1,80 ! Pad rest with commas 20 IA(J) = ',' DO 30 J= 1,ICOUNT ! Strip off leading blanks IF(IA(J) .EQ. ' ') go to 30 I = IA(J) IA(J) = ' ' IA(1) = I I = IA(J+1) IA(J+1) = ' ' IA(2) = I GO TO 31 30 CONTINUE 31 CONTINUE 90 DO 100 JGO = 1,NAMSIZ 99 IF(INAM(JGO) .EQ. INAMF)GO TO( 1 160, 170, 180, 190, 2 220, 230, 240, 290, 300, 3 310, 270, 271, 272, 273, 4 240,291,220,289,288,298,299,120,600,210,301,287, 5 291,400,410,999,500),JGO 100 CONTINUE C C BAD INPUT MESSAGE C 110 CALL MSG('Illegal input - Type HELP for help') GO TO 950 C C 'ESC' KEY ERASES SCREEN C 120 CONTINUE C CALL DISCKP IPLOT = 0 CALL ERASE GO TO 950 C C MARKER TYPEIN ROUTINE C 160 CONTINUE DECODE(80,1002,IA,ERR=110)I,VALUE1 ! GET CUT #, AND VALUE CALL MARKF(I,0,VALUE1) ! SET CUT CALL MGETF(I,IH,VALUE) IH = ABS(IH) GO TO 950 C C END PROGRAM 'EXIT' C 170 CONTINUE C CALL DISCKP ! DISABLE CHECKPOINTING CALL ERASE ! ERASE SCREEN CALL EXIT C C RESCALE & ZERO HISTOGRAM FUNCTIONS C 180 CONTINUE DECODE(80,1003,IA,ERR=110)IH,IXMIN,IXMAX,IYMIN,IYMAX CALL HSTAT(IH,IX,IY,IXS,IX0,IYS,IY0) IF(IX .LE. 0) GO TO 110 IF(IXMAX .EQ. IXMIN) GO TO 181 IX0 = IXMIN IXS = (IXMAX-IX0+IX-1)/IX 181 IF(IYMAX .EQ. IYMIN) GO TO 185 IY0 = IYMIN IYS = (IYMAX - IY0+IY-1)/IY 185 CALL SCALH(IH,IXS,IX0,IYS,IY0) ! RESCALE HISTOGRAM 186 IF(IH .EQ. 0) GO TO 100 ! ZERO = FORBIDDEN HIST # CALL ZHIST(IH) ! THEN ERASE IT GO TO 950 C C ZERO 1 HISTOGRAM C 190 DECODE(80,1003,IA,ERR=110)IH GO TO 186 C C MARKER PRINT ROUTINE C 210 CONTINUE ! MARKER OUTPUT OPTION CALL MGETF(0,MAX,VALUE) CALL MSG('Cuts for current histogram') DO 215 J = 1,MAX ! SEARCH ALL MARKERS CALL MGETA(J,IHM,VALUE) ! GET MARKER VALUE IF(IH .EQ. 0 .OR. IH .EQ. ABS(IHM)) 1 WRITE(5,1210)J,IHM,VALUE ! PRINT IT IF FOR CURRENT HIST 215 CONTINUE GO TO 950 C C INPUT MARKERS BY CURSOR C 220 CONTINUE CALL MGETA(0,MAX,VALUE) ! Get number of markers IF(IPLOT .EQ. 0) GO TO 950 ! SKIP FUNCTION IF NO PLOT DO 225 I = 1,MAX ! SEARCH ALL MARKERS CALL MGETA(I,K,VALUE) IF(ABS(K) .NE. IH) GO TO 225 ! IF NOT FOR THIS HIST DO 224 J = 0,1 ! CORRECT MARKER SO USE IT C CALL DISCKP ! DISABLE CHECKPOINTING CALL INTENS(J) ! INTENSITY = BLACK THEN WHITE CALL MARKPL(I) ! ERASE, THEN DRAW THE MARKER C CALL ENACKP ! REENABLE CHECKPOINTING IF(J .EQ. 1) GO TO 224 ! IF REDRAWN MARKER SKIP REST CALL CURSOR(IXN,IYN,ICHR) ! GET THE CURSOR POSITION IF(ICHR .NE. "15) GO TO 224 ! Not 'return' no change ? VALUE = IXN * XSC + XORG ! NEW X MARKER POSITION VALU1 = IYN * YSC + YORG WRITE(5,*) VALUE,VALU1 IF(K .LT. 0) VALUE = VALU1 ! Y marker ? CALL MARKF(I,0,VALUE) ! SET NEW POSITION 224 CONTINUE 225 CONTINUE GO TO 950 C C INPUT OPTION C 230 CONTINUE DO 231 II = 3,20 IF(IA(II) .NE. ' ') GO TO 232 ! Find the first non blank char 231 CONTINUE GO TO 110 232 DO 233 IJ = 1,4 IA(IJ) = IA(II) ! Move non blank char down IF(IA(II) .EQ. ' ') GO TO 234 ! Found end of name IA(II) = ' ' 233 II = II + 1 234 CONTINUE DECODE(40,1004,IA,ERR=110)VALUE1,VALUE2 ! Get limits or values D WRITE(5,*) ISTN,VALUE1,VALUE2 IF(ISTN .NE. 0) GO TO 239 LERR = 0 CALL PLIM(IA,8,VALUE1,LERR) ! RESET COLOR SCOPE VARIABLE GO TO(235,236,237,238,2380) LERR GO TO 950 ! No errors 235 CALL MSG('Parameter name not found') GO TO 950 236 CALL MSG('Name not input parameter') GO TO 950 237 CALL MSG('VALUE smaller than limits') GO TO 950 238 CALL MSG('VALUE greater than limits') GO TO 950 2380 CALL MSG('VALUE too big for variable') GO TO 950 239 CALL PLIM(IA,3,VALUE1,VALUE2) ! Set limits GO TO 950 C C AUTO SCALING C 240 CALL CURSOR(IX,IY,ICHR) ! GET LOWER LH CORNER IF(ICHR .NE. "15) GO TO 950 CALL PTPL(IX,1023) CALL VECT(IX,IY) CALL VECT(1023,IY) CALL CURSOR(IXN,IYN,ICHR) ! GET UPPER RH CORNER IF(ICHR .NE. "15) GO TO 950 IXMIN = IX*XSC + XORG IXMAX = IXN*XSC + XORG IZMIN = IY*YSC + YORG IZMAX = IYN*YSC + YORG GO TO 291 270 CALL SSET ! Allow multiple entry here CALL C2BEG ! BEGIN A RUN C C CONTROL FUNCTIONS BEGIN,END,RUN,STOP C GO TO 950 271 CALL C2END ! END A RUN GO TO 950 272 CALL C2RUN GO TO 950 273 CALL C2STP GO TO 950 C C HERE WE DO HISTOGRAM PLOTS C 287 CONTINUE ! Set auto scale IXMIN = 0 IXMAX = 0 IYMIN = 0 IYMAX = 0 IZMIN = 0 IZMAX = 0 GO TO 291 ! Plot it now 288 IH = IH - 2 ! PLOT HIST - 1 289 IH = IH + 1 ! PLOT HIST + 1 CALL HSTAT(IH,IX) IF( IX .NE. 0) GO TO 287 ! Plot the hist CALL HSTAT(0,IX,IMAX) IF( IH .GT. IMAX ) IH = 0 IF( IH .LT. 0 ) IH = IMAX + 1 IF( IH .EQ. 0 ) GO TO 291 ! Plot hist GO TO 99 ! Try again 290 DECODE(80,1003,IA,ERR=120) IH,IZMIN,IZMAX,IXMIN,IXMAX,IYMIN,IYMAX 291 CALL DIS2B(IH,IZMIN,IZMAX,IXMIN,IXMAX,IYMIN,IYMAX) IPLOT = -1 ! PLOT ON SCREEN GO TO 950 C C COLOR SCOPE OUTPUT C 298 IPAGE = IPAGE - 2 299 IPAGE = IPAGE + 1 IPAGE = IAND("17,IPAGE) ! LIMIT COLOR PAGE TO 0-15 GO TO 301 300 DECODE(80,1003,IA,ERR=120)IPAGE ! READ IN PAGE # 301 CALL POUT(IPAGE) ! OUTPUT 1 COLOR SCOPE PAGE IPLOT = 0 ! NO PLOT ON SCREEN GO TO 950 C C Print 1 or more histograms (IH=0 print all) C 310 DECODE(80,1003,IA,ERR=120)IH ! GET HIST # 315 CALL HISTO(IH) ! PRINT HISTOGRAM REQUESTED GO TO 950 400 CONTINUE CALL MSG('TYPE: SEND "taskname" to reattach task to TI:') GO TO 950 410 CONTINUE D CALL MSG('limit change') C C SECTION TO HANDLE CHANGE LIMITS C ISTN = 3 GO TO 230 c c Output screen as plot c 500 CALL PLTOLP GO to 950 600 IPLOT = 2 ! SET UP FOR CONTINUOUS PLOT 950 CALL SSET ! Restart input RETURN 999 CALL ERASE ! Erase screen IPLOT = 0 ! No plot on screen WRITE(5,1999) ! Write help text GO TO 950 ! End C C FORMATS C 1000 FORMAT(I10) 1002 FORMAT(2X,I10,6F10.0) 1003 FORMAT(2X,7I10) 1004 FORMAT(4X,2F20.0) 1210 FORMAT(' MARKER#'I3' HIST#'I3' VALUE'1P,G15.7) 1999 FORMAT(' Single key commands't40'(^ =ctrl key)'/ 1 ' ^K -> Hist-1'T26'^] -> Hist' 2 T52'^J -> Hist+1' 3 /' ^H -> Page-1't26'"return" -> page' 4 t52'^L -> Page+1' 5 /' "esc" -> erase'/' "^A" -> Replot histogram' 7 /' "^W" -> Show cuts' 6 t40'"tab" -> Set cuts "ret"=set "space"=skip' 8 /' "^B" -> Blow up or rescale by cursor' 9 /' "^P" -> Plot screen on LP:' 9 //' Commands - Only first 2 letters are necessary' 9 /' [] denote optional parameters' / 1 /' CU Ihist,Value't40'-> Set cuts' 1 /' HI Ihist,[Hmin],[Hmax],[Xmin],[Xmax],[Ymin],[Ymax]' 2 ' -> Display histogram' 1 /' H = height or contour (2 DIM)' 1 /' HI 0,Ihist 't40'-> Display list of hists' 1 /' HS Ihist,Xmin,Xmax,[Ymin],[Ymax]'t40'-> rescale hist' 1 /' ZE Ihist't40'-> Zero histogram' 2 /' PA [Ipage]'t40'-> Display paramter page' 4 /' PL Name Lolim,Hilim't40'-> Change parameter limits' 3 /' IN Name Value't40'-> Change parameter value' 5 //' BEgin ENd RUn STop EXit' 6 ) END