C PROGRAM REVIEW.FT C ---------------- C C PETER LEMKIN C IMAGE PROCESSING UNIT, DCBD C NATIONAL CANCER INSTITUTE C NATIONAL INSTITUTES OF HEALTH C 9000 ROCKVILLE PIKE C BETHESDA, MD. 20014 C C MAY 31, 1977 C MAY 18, 1977 C MAY 17, 1977 C MAY 16, 1977 C MAY 4, 1977 C MAY 3, 1977 C C C C INTRODUCTION C ------------ C REVIEW.FT IS A CHAINED PROGRAM USED WITH BMON2 C IT RECEIVES ITS ARGUMENTS FROM THE CD AREA AND THE IBM1,IHGH1 C IBM2,IHGH2, JBM, JHGH VARIABLES IN COMMON. COMMON IS RESTORED C FIRST BEFORE THE FUNCTION (TO BE INSERTED INTO THE BODY) IS C EVALUATED. AFTER THE FUNCTION IS PERFORMED, COMMON C IS SAVED AND BMON2 IS CHAINED BACK TO. C ANY COMPUTATIONS ARE DONE, THE ARGUMENTS ARE THEN CHECKED C C REVIEW COPIES A MAGNIFIED OR DEMAGNIFIED IMAGE C TO BY REPEATING OR SAMPLING PIXELS. THE MAGNIFICATION C IS DETERMINED BY SCALE=N/D IN THE CDSPEC ARGS. C C C C BMj_REVIEW,MTAi:(Opt. specific file) (Opt. /H to print header) - C dump a set of images to be C acquired to BMj from MTAi:. If a specific file is C requested, then only 1 file is transfered. Type C keypad data to get the next file. C The algorithm is as follows: C C [1] "Initialization" C IF /R C THEN REWIND MTAj; C [2] "Data acquisition loop" C IF /X C THEN GOTO [2]; C IF KINFILE[1:4] NEQ 0 FILE C THEN READ IT FROM TAPE, GOTO [2]. C IF NO FILE SPECIFIED AND EXECUTE KEY C THEN READ NEXT FILE, GOTO [2]. C IF LOGICAL EOT THEN RETURN TO BMON2. C If ^O C Then Return to BMON2; C [3] "Get data and write it on MTA" C BMj_READ MAG10 FORMAT, MTAi:KINFILE C IF /H THEN PRINT PICTURE FILE HEADER. C IF OLD KINFILE NEQ 0 C THEN RETURN TO BMON2; C IF /X C THEN IF /M C THEN READ COMMAND DECODER, GOTO [2] C ELSE RETURN TO BMON2 C ELSE GOTO [2]; C Goto [2]; C OPDEFS C ------ S OPDEF MTRS 6706 S OPDEF TADI 1400 S OPDEF DCAI 3400 C S OPDEF POSTA 6520 S OPDEF POSTB 6521 S OPDEF DISP1 6435 S OPDEF DISP2 6436 C C S OPDEF SWAB 7431 S OPDEF SWBA 7447 C S OPDEF MUY 7405 S OPDEF DVI 7407 C S OPDEF DISP2 6436 S OPDEF DISP1 6435 C S OPDEF MQA 7501 S OPDEF MQL 7421 S OPDEF KRS 6034 S OPDEF BSW 7002 C C S OPDEF FBW12 6352 /READ EXECUTE KEY BIT 0. C C S OPDEF STQMT 6300 S SKPDF QMSKP 6301 /SKIP ON QMT READY C S OPDEF HPL 6360 S OPDEF VPL 6362 S OPDEF HSL 6361 S OPDEF VSL 6363 C S OPDEF HPR 6320 S OPDEF VPR 6322 S OPDEF GETA 6522 S OPDEF GETB 6523 S OPDEF POSTA 6520 S OPDEF POSTB 6521 C S OPDEF BMX0 6500 S OPDEF BMY0 6504 S OPDEF BMX4 6510 S OPDEF BMY4 6514 C C [1] INITIALIZATION WRITE(1,995) WRITE(3,995) 995 FORMAT(' REVIEW 5/31/77 - 4:01PM') C ET=TIMER(0) C C IF NOT /X THEN PRINT INSTRUCTIONS IF(ISW(24))200,105,200 105 WRITE(1,106) 106 FORMAT(' PRESS EXECUTE KEY TO COPY MTAI:==>BMJ.') C C C [2] VERIFY BM SPECS 200 CONTINUE C@@S JMS CKIN C IF NOT /A C THEN CKOUT S TAD \ISW S SNA CLA S JMS CKOUT C@@S JMS CKIN2 C C C [2.1] VERIFY MTAj: SPEC DEVICE=GETDEVICE(KDEVIN(2)) S TAD \DEVICE S TAD (-1524 /"MT" S SZA CLA S JMP \999 /SPEC ERROR C C C [3.] PROCESS DATA S TAD \DEVICE# S AND (0003 S DCA \IDEV C C IF /R THEN REWIND MTAJ; IF(ISW(18))301,300,301 301 CALL MAGTAP(0,0,1,MTRS,0,IDEV) C C IF BOT THEN 300 CONTINUE S MTRS S AND (1000 /BOT S SNA CLA S JMP \302 C ADVANCE PAST FIRST EOF CALL MAGTAP(1,0,6,MTRS,0,IDEV) 302 CONTINUE C C C C [3.1] "Initialization" 320 CONTINUE C [2.2] COPY KINFILE[5:8]==>KINFILE[1:4] DO 324 I=1,4 324 KINFILE(I)=KINFILE(I+4) C C C IF /X C THEN GOTO [2]; IF(ISW(24))330,321,330 C IF EXECUTE KEY THEN GOTO [3.3] S \321, FBW12 S AND (4000 S SZA CLA S JMP \330 /[3.3] C C If ^O 322 CONTINUE S CPAGE 3 S JMS TTYCTL S JMP \998 /GOODBYE C Then Return to BMON2; GOTO 320 C C C [3.3] "Get data and write it on BM" 330 CONTINUE C IF /A C THEN "DO BM0,1,2,3" M1_1, M2_4 C ELSE "DO " M2_M1_JBM+1; M1=JBM+1 M2=M1 S TAD \ISW S SNA CLA S JMP \333 M1=1 M2=4 333 DO 331 M=M1,M2 JBM=M-1 C CALL MTATOBM(JBM,JHGH,KINFILE,DEVICE,IBUF4) C C IF /H THEN PRINT HEADER. IA=ISW(8) S TAD \IA S SZA CLA S JMP \332 C C PRINT THE CLASS # INSTEAD WRITE(1,335)IBUF4(78) WRITE(3,335)IBUF4(78) 335 FORMAT(' CLASS #=',I5) GOTO 331 C 332 CALL PHEADER(IBUF4,IOUTSPOOL) 331 CONTINUE C C IF /X C THEN IF /M C THEN READ COMMAND DECODER AND GOTO [2] C ELSE RETURN TO BMON2 C ELSE GOTO [3.1]; IF(ISW(24))341,320,341 341 IF(ISW(13))342,998,342 C C READ CD 342 CALL BCDSPEC C SETUP THE JBM SPEC S TAD \KOUTFILE# S BSW S AND (7 S DCA \JBM C S TAD \KOUTFILE# S BSW S AND (7700 S TAD (-1000 /"H@" S SNA CLA S IAC S DCA \JHGH GOTO 200 C C C [999] RETURN GOTO 998 999 WRITE(1,996) 996 FORMAT('BAD BM OR MTA SPECIFICATION!') 998 ET=TIMER(1) CALL CHAIN('BMON2') C*************************************************** C *PROCEDURE C K O U T C****************************************************** C C C CHECK WHETHER THE OUTPUT BM SPEC IS LEGAL ELSE GOTO 999. S CPAGE 3 SRCKOUT, JMP I CKOUT S CKOUT, 0 /ENTRY C C [1] TEST IF KOUTFILE="BM" S TAD \KOUTFILE S CIA S TAD BMTEXT S SZA CLA S JMP \999 /FAILED C C [2] TEST IF (KOUTFILE(2) LAND '7700)=DIGIT S TAD \KOUTFILE# S BSW S AND (0077 S TAD (-60 /"0" S SPA S JMP \999 /NO, FAILED S TAD (-D8 /"7" TEST S SMA CLA S JMP \999 /FAILED S JMP RCKOUT /OK. C C C*************************************************** C *PROCEDURE C K I N C****************************************************** C C C CHECK WHETHER THE INPUT BM SPEC IS LEGAL ELSE GOTO 999. S CPAGE 3 SRCKIN, JMP I CKIN S CKIN, 0 /ENTRY C C [1] TEST IF BMI1="BM" S TAD \SFILE S CIA S TAD BMTEXT S SZA CLA S JMP \999 /FAILED C C [2] TEST IF (BMI1(2) LAND '7700)=DIGIT S TAD \SFILE# S BSW S AND (0077 S TAD (-60 /"0" S SPA S JMP \999 /NO, FAILED S TAD (-D8 /"7" TEST S SMA CLA S JMP \999 /FAILED S JMP RCKIN /OK. C C C*************************************************** C *PROCEDURE C K I N 2 C****************************************************** C C C CHECK WHETHER THE INPUT BM SPEC IS LEGAL ELSE GOTO 999. S CPAGE 3 SRCKIN2, JMP I CKIN2 S CKIN2, 0 /ENTRY C C [1] CHECK FIRST IBM1 SPEC S JMS CKIN C C C [2] TEST IF BMI2="BM" S TAD \SEXT S CIA S TAD BMTEXT S SZA CLA S JMP \999 /FAILED C C [3] TEST IF (BMI2((6) LAND '7700)=DIGIT S TAD \SEXT# S BSW S AND (0077 S TAD (-60 /"0" S SPA S JMP \999 /NO, FAILED S TAD (-D8 /"7" TEST S SMA CLA S JMP \999 /FAILED S JMP RCKIN2 /OK. C C C ************************************************************ C SUBROUTINE: T T Y C T L (INTERNAL) C ************************************************************ C S CPAGE 3 S RTTYC, JMP I TTYCTL S TTYCTL, 0000 /ENTRY C S KSF /ANYTHING TYPED S JMP NORMAL /NO, RETURN NORMALLY S KRB /GET TYPED CHARACTER S AND (0177 /TAKE CARE OF PARITY PROBLEMS S TAD (-17 /TEST FOR CTRL/O S SNA /SKIP IF NOT CTRL/O S JMP RTTYC /ABORT CALLING ROUTINE (ERROR RETURN) S TAD (-4 /TEST FOR CTRL/S [-17-4=-23(OCTAL)] S SZA CLA /SKIP IF CTRL/S S JMP NORMAL /NOT CTRL/O OR CTRL/S SO RETURN NORMALLY C S SLEEP,KSF /WAIT FOR CTRL/Q S JMP SLEEP /KEEP WAITING S KRB /READ CHARACTER S AND (0177 S TAD (-17 /IS IT A CTRL/O? S SNA /SKIP IF NOT S JMP RTTYC /YES, ABORT S TAD (-2 /TEST FOR CTRL/Q (-17-2=-21 OCTAL) S SZA CLA /SKIP IF SO S JMP SLEEP /NOPE, KEEP SLEEPING C S NORMAL,INC TTYCTL /INCREMENT RETURN ADDRESS FOR NORMAL RETURN S CLA /SAFETY VALVE S JMP RTTYC /RETURN C************** P A R A M E T E R S ************* S BMTEXT, TEXT /BM/ END