HED CNFIG * * THIS PROGRAM CONFIGURES A DACE SYSTEM THROUGH THE SWITCH * REGISTER AND TELETYPE. IT DOES NOT HANDLE MORE THAN BASIC * SYSTEM UNITS, I.E.; TELETYPE * PHOTOREADER * TIME BASE GENERATOR * 2911 AND 2401 (8421 OR 4221) * OR 2912 AND 2402 (8421 ONLY) * AND/OR MULTIVERTER * OR MINIVERTER * AND IS PRIMARILY INTENDED FOR USE WITH "AXEPT" AND * "MVERT", CUSTOMER ACCEPTANCE DACE TASKS * * THE PROGRAM STARTS AT ADDRESS 2000 AND EXITS TO * THE DACE EXECUTIVE * * "MULT" CARRIES M-VERTER IDENTIFICATION TO THE TASK * "NSCAN" CARRIES SCANNER IDENTIFICATION TO THE TASK * NAM CNFIG ENT CNFIG,DIRAD EXT .DIO.,.IOC.,.IOI. EXT COD42,MSTRT EXT .RTN.,SETAD,.SQT. COM NSCAN,MULT,IA(102) CNFIG NOP LIA 1 TTY SC FROM SWITCH REGISTER AND B77 STA IOSC JSB SETAD GO TO SETAD DEF RDR DEF B0 DEF IOSC DEF B2 RDR JSB .IOC. TYPE "READER?" OCT 20002 JMP *-2 DEF WRD1 DEC 5 JSB RC READ REPLY CPA B77 COMPARE REPLY TO 77 JMP BOMPR IF 77, NO READER JSB CHKOD IF READER, CHECK FOR LEGAL SC SSB JMP RDR NOT LEGAL, TRY AGAIN JSB SETAD LEGAL SC, GO TO SETAD DEF TBG RETURN TO TBG FROM SETAD DEF B1 DEF IOSC DEF B1 * * BOMPR REMOVES PHOTO-READER FROM EQT AND REPLACES WITH TTY * BOMPR LDA SQTAD GET SQT ADDRESS JSB DIRAD GET ACTUAL ADDRESS LDB 0,I EQT ENTRY FOR TTY ADA B2 ADDRESS OF UNIT 3 IN SQT STB 0,I ASSIGN TTY TO UNIT 3 ADA B2 ADDRESS OF UNIT 5 IN SQT STB 0,I ASSIGN TTY TO UNIT 5 * TBG JSB .IOC. TYPE "T.B.G.?" OCT 20002 JMP *-2 DEF WRD2 DEC 5 JSB RC READ REPLY JSB CHKOD CHECK FOR LEGAL SC SSB JMP TBG TRY AGAIN JSB SETAD LEGAL SC, GO TO SETAD DEF MULMN DEF B43 DEF IOSC DEF B1 MULMN JSB .IOC. TYPE "M-VERTER?" OCT 20002 JMP *-2 DEF WRD6 DEC 6 JSB RC READ REPLY AND STA MULT SAVE FOR MVERT CPA B77 COMPARE REPLY TO 77 JMP DSI IF 77, NO M-VERTER JSB CHKOD IF M-VERTER, CHECK FOR LEGAL SC SSB JMP MULMN NOT LEGAL, TRY AGAIN WHICH JSB .IOC. TYPE "WHICH?" OCT 20002 JMP *-2 DEF WRD7 DEC 4 JSB RCD READ M-VERTER TYPE CPA B1 1 FOR MULTIVERTER JMP SHIFT SZA 0 FOR MINIVERTER JMP WHICH NOT 0 OR 1, TRY AGAIN SHIFT ALS,ALS ALF ADA IOSC STA IOSC JSB SETAD LEGAL SC, GO TO SETAD DEF DSI DEF B76 DEF IOSC DEF B1 DSI JSB .IOC. TYPE "DSI?" OCT 20002 JMP *-2 DEF WRD3 DEC 3 JSB RC READ REPLY AND STA NSCAN SAVE FOR AXEPT CPA B77 JMP SETUP JSB CHKOD CHECK FOR LEGAL VALUE SSB JMP DSI TRY AGAIN SCAN JSB .IOC. TYPE "SCANNER?" OCT 20002 JMP *-2 DEF WRD4 DEC 5 JSB RCD READ REPLY AND STA NSCAN SAVE FOR AXEPT LDB B75 STB EQTN ADA M2912 IS SCANNER SZA,RSS A 2912? JMP SSCAN YES, GO TO SETAD LDB B77 STB EQTN INA,SZA,RSS IS SCANNER A 2911? JMP SSCAN YES, GO TO SETAD JSB .IOC. NO, TYPE "2911 OR 2912" OCT 20002 JMP *-2 DEF CHOSE DEC 7 JMP SCAN TRY AGAIN SSCAN JSB SETAD DEF ICODE DEF EQTN DEF IOSC DEF B3 ICODE JSB .IOC. TYPE "CODE?" OCT 20002 JMP *-2 DEF WRD5 DEC 4 JSB RCD READ REPLY JSB SETCD CHECK FOR LEGAL CODE * * SETUP INITIALIZES TASK CONSTANTS * SETUP LDB IPGM * * THIS SECTION SETS IPGM FOR 0.1V TO 1000V RANGES, CYCLICALLY * LOOP1 LDA M5 STA CYCLE LDA PROG LOOP2 STA 1,I INA INB ISZ CTR RSS JMP NEXT ISZ CYCLE JMP LOOP2 JMP LOOP1 * * THIS SECTION SETS CHANNELS TO 0,2,4,6,1,3,5,7, * 8,10,12,14,9,11,13,15,.....45,47,48,49 * NEXT LDA M4 CLB,INB EVEN ADB M1 CLE ODD STA M4 LOOP4 STB ICHAN,I ISZ ICHAN ISZ CNTR INB,RSS JMP SETNO INB ISZ M4 JMP LOOP4 SEZ JMP EVEN ADB M7 CCE JMP ODD * * THIS SECTION SETS # OF CHANNELS SCANNED AND TIME ALLOWED * SETNO INB STB ICHAN,I LDA B10 STA NCHAN,I SCAN 8 CHANNELS LDA D30 STA ITIM3,I ALLOW 30 SECONDS JSB MSTRT HED CNFIG-RC, RCD, CHKOD, DIRAD * * RC READS OCTAL TELETYPE REPLIES * RC NOP CLA,INA CLB,INB JSB .DIO. DEF K6 DEF BACK JSB .IOI. STA IOSC BACK JMP RC,I * * RCD READS DECIMAL TELETYPE REPLIES * RCD NOP CLA,INA CLB,INB JSB .DIO. OCT 0 DEF BACK1 JSB .IOI. BACK1 JMP RCD,I * * CHKOD CHECKS THAT SELECT CODES ARE BETWEEN 10 & 67 * CHKOD NOP ADA M8 CLB,INB SET UP TO RETURN VALUE = 1 SSA JMP INVAL CMA,INA ADA SCMAX SSA,RSS JMP CHKOD,I INVAL JSB .IOC. OCT 20002 JMP *-2 DEF XCOD DEC 7 CCB JMP CHKOD,I * * DIRAD FINDS DIRECT ADDRESS OF RELOCATABLE OPERAND * DIRAD NOP N1 SSA,RSS INDIRECT? JMP N2 NO THIS IS ACTUAL ADDRESS ELA,CLE,ERA YES - REMOVE INDIRECT BIT LDA 0,I GET NEXT STEP JMP N1 TRY AGAIN N2 JMP DIRAD,I ACTUAL ADDRESS IN A HED CNFIG-SETCD, CONSTANTS * * SETCD TRANSFERS A 4221 TO 8421 CONVERSION SWITCH TO D.77 * SETCD NOP CPA C8421 JMP .8421 CPA C4221 JMP .4221 JSB .IOC. OCT 20002 JMP *-2 DEF MES1 DEC 6 JSB .IOC. OCT 40002 SSA JMP *-3 JMP ICODE .8421 CLA,RSS VALUE IS 0 .4221 CLA,INA VALUE IS + STA COD42 JMP SETCD,I * * CONSTANTS, VARIABLES, MESSAGES * B0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B10 OCT 10 B43 OCT 43 B75 OCT 75 B76 OCT 76 B77 OCT 77 CHOSE ASC 7,2911 OR 2912 _ CNTR DEC -49 CTR DEC -50 CYCLE BSS 1 C4221 DEC 4221 C8421 DEC 8421 D30 DEC 30 EQTN OCT 75 ICHAN DEF IA+51 IOSC BSS 1 IPGM DEF IA ITIM3 DEF IA+50 K6 ASC 3,( K6) MES1 ASC 6,8421 OR 4221 M1 OCT -1 M4 OCT -4 M5 OCT -5 M7 OCT -7 M8 OCT -10 M2912 DEC -2912 NCHAN DEF IA+101 PROG OCT 2042 SCMAX OCT 57 SQTAD DEF .SQT. WRD1 ASC 5,READER? _ WRD2 ASC 5,T.B.G.? _ WRD3 ASC 3,DSI? _ WRD4 ASC 5,SCANNER? _ WRD5 ASC 4,CODE? _ WRD6 ASC 6,M-VERTER? _ WRD7 ASC 4,WHICH? _ XCOD ASC 7,10 TO 67 ONLY END HED SETAD A GENERAL CONFIGURING ROUTINE NAM SETAD NOSWP EQU 8 * NOSWAP IS THE NUMBER OF ENTRYS EXPECTED IN THE SWAP TABLE * IT MUST BE MORE THAN 4 AND NEED NEVER BE GREATED THAN 28 * THIS IS A PROGRAM TO CONFIGURE A GENERAL BCS SYSTEM * THE FORTRAN CALL IS *********************************** * CALL SETAD(DRVID,NEWSC,NODEV,NODRV) *********************************** * WHERE THE PARAMETERS ARE: * DRVID IS AN INTEGER CONSTANT AND IS THE SAME NUMBER FOUND * IN THE EQT #2 ENTRY E.G. 00 FOR THE TTY,01 FOR THE PHOTO * READER (THIS IS THE D.XX CODE) * NEWSC IS AN INTEGER CONSTANT WHICH CONTAINS THE NEW SELECT CODE * NODEV IS AN INTEGER CONSTANT WHICH IS EQUAL TO THE * NUMBER OF DEVICE AS ASSOCIATED WITH THE DRIVER * NODRV IS USE WHERE THERE IS MORE THAN ONE ENTRY OF THE * GIVEN DRIVER IN THE EQUIPMENT TABLE ************THIS PARAMETER IS ACTIVE ONLY IF THE PROGRAM IS ASSEMBLED * UNDER THE N OPTION * IF IT IS ONE (INTEGER) THE FIRST APPEARANCE IS CONFIGURED * IF TWO THE SECOND ETC. * * THE TRAP CELLS ARE TREATED AS FOLLOWS * IF IT IS AN I/O GROUP INSTRUCTION THE SELECT CODE IS MODIFIED * TO THE NEW SELECT CODE . IF IT IS NOT AN I/O GROUP * INSTRUCTION THE TWO LOCATIONS ARE JUST SWAPPED. EXT .ENTR,.SQT. ENT SETAD A EQU 0 B EQU 1 SWPNO NOP NUMBER OF ENTRIES IN THE TABLE SWPTB BSS NOSWP THIS IS AN EQU AT LINE 5 COUNT BSS 1 IFN ORG *+3 XIF OLDS. BSS 1 IFN ORR XIF DRVID BSS 1 NEWS. BSS 1 NODEV BSS 1 IFN NODRV BSS 1 XIF SWAPC EQU COUNT OLDSC EQU COUNT NEWSC EQU DRVID SWAPI EQU NEWS. ORG *-11 ORG BACK FOR ENTRY ROUTINE NOP START LDA JSB.E GET THE JSB .ENTR INSTRUCTION STA ENTR STORE IT IN THE ENTRY POINT LDA SQTAD GET SQT ADDRESS RAL,CLE,SLA,ERA STRIP THE INDIRECT BIT LDA A,I DIRECT ADDRESS NOW ADA SIX ADD TO GET ADDRESS OF # OF ENTRIES STA SQTAD STORE THE ADDRESS OF EQT NUMBER FOR ROUTINE JMP ENTR DO JSB .ENTR AND REST OF ROUTINE JSB.E JSB .ENTR SIX OCT 6 ORR CONTINUE REST OF PROGRAM SETAD NOP ENTR JMP START FIRST ENTRY JUMP REPLACED BY JSB .ENTR THERE AFTER DEF DRVID LDA NODEV,I GET THE NO OF DEVICES FOR THE DRIVER CMA,INA MAKE IT NEGATIVE STA NODEV AND SAVE IT IFN LDA NODRV,I GET THE NUMBER OF THE DRIVER CMA,INA STA NODRV STORE BACK THE NEGATIVE NUMBER XIF LDB SQTAD ADDRESS OF FIRST WORD OF EQT LDA B,I GET # CMA,INA MAKE NEG STA COUNT USE AS COUNTER INB GET DOWN INTO THE EQT LDA DRVID,I GET THE DRIVER ID ALF,ALF MOVE IT TO THE PROPER POSITION FOR COMPARE STA DRVID SAVE IT INB,RSS B NOW RIGHT FOR WORD TWO SEARH ADB FOUR GET ADDRESS OF NEXT ENTRY LDA B,I GET THE ENTRY AND TYPCD =B37400 STRIP ALL EXTRA BITS CPA DRVID JMP FOUND IF THE SAME WE FOUND IT MULDR ISZ COUNT IF NOT CONTINUE JMP SEARH GO BACK IOG HLT 0 NOT FOUND STOP ERROR JMP *-1 FOUND EQU * IFN JMP MULDR NO CONTINUE ISZ NODRV MULT DRIVER THIS ONE? XIF CMB,INB SUBTRACT ONE TO CFLAG CMB GET THE SELECT CODE LDA B,I GET THE SELECT CODE AND B77 IN A STA OLDS. SAVE THE OLD SELECT CODE LDA B,I GET THE EQT ENTRY AGAIN AND NOSC =B177700 CLEAR THE SC ADA NEWS.,I PUT IN THE UMASKED NEW SELECT CODE IOR CFLAG SET CONFIGURED FLAG CPA B,I HAS THIS DRIVER BEEN CONFIGURED ALREADY? JMP SETAD,I YES: RETURN STA B,I PUT IT IN THE EQT AND B77 ISOLATE THE NEW SELECT CODE STA NEWSC AND SAVE IT SO WE CAN INCREMENT IT MUL LDA SWAPA GET THE ADDRESS OF THE SWAP TABLE STA SWAPI STORE IT AS THE SWAP INDEX LDB SWPNO GET THE NUMBER OF ENTRIES CMB,INB,SZB,RSS MAKE NEG AND IF ZERO JMP SETUP JUMP OUT TBLSH LDA SWAPI,I GET THE FIRST WORD AND B77 ISOLATE THE FROM CODE CPA OLDS. IS IT THE OLD SELECT CODE? JMP MATCH YES: FOUND JUMP ISZ SWAPI INCREMENT THE INDEX INB,SZB UNTIL COUNT IS ZERO JMP TBLSH CONTINUE TABLE SEARCH SETUP ISZ SWPNO NOT FOUND MAKE NEW ENTRY LDA OLDS. GET THE OLD SC JMP OUT GO FINISH MATCH LDA SWAPI,I FOUND UPDATE THE TABLE ALF,ALF ROTATE THE OLD TO CODE TO THE LOW ORDER AND B77 AND ISOLATE IT OUT STA OLDSC STORE AS THE NEW OLD CODE ALF,ALF ROTATE THE TO CODE IOR NEWSC PUT IN THE NEW SC STA SWAPI,I STORE IT IN THE TABLE ENDSW LDA OLDSC,I GET THE OLD TRAP CELL LDB NEWSC,I AND THE NEW ONE STB OLDSC,I STORE THE OLD ONE BACK WITH NO MOD STA NEWSC,I STORE THE NEW ONE BACK WITH NO MOD AND NOSC =B177700 DROP THE SELECT CODE LDB A TO B ADB NEWSC PUT IN THE NEW SELECT CODE AND IOGMS =B172000 IS THIS AN I/O GROUP INSTRUCTION CPA IOG ? STB NEWSC,I YES: RESET THE NEW TRAP CELL ISZ NEWSC INCREMENT SC FOR MORE THAN ONE DEVICE ISZ OLDS. INCREMENT THE ORGIONAL OLD SC ISZ NODEV MORE THAN ONE DEVICE? JMP MUL YES GO BACK AND PROCESS IT JMP SETAD,I RETURN SQTAD DEF .SQT. B77 OCT 77 FOUR OCT 4 TYPCD OCT 37400 NOSC OCT 177700 IOGMS OCT 172000 SWAPA DEF SWPTB ADDRESS OF SWAP TABLE END HED MSTRT * * MSTRT TRANSFERS CONTROL TO DACE AFTER CONFIGURING AND * SETS THE ADDRESS AND LENGTH OF THIS CONFIGURING PROGRAM * INTO RLEAS SO THAT THE BLOCK WILL BE AVAILABLE FOR * OUTPUT BUFFERING * NAM MSTRT ENT COD42,MSTRT EXT AXEP1,AXEP2,DIRAD MSTRT NOP LDA AX1 JSB DIRAD GET ACTUAL ADDRESS OF DEF .AUTO LDB C2000 START OF BLOCK STB 0,I INA CMB,INB INB ADB .END LENGTH OF BLOCK STB 0,I LDA AX2 JSB DIRAD GET ACTUAL ADDRESS CLB STB 0,I WIPE OUT RELEASE OF AUTO JMP 2 AX1 DEF AXEP1 AX2 DEF AXEP2 C2000 OCT 2000 * * .END, COD42, END MUST BE IN SEQUENCE * .END DEF * COD42 NOP END FTN,B,L SUBROUTINE AXEPT DIMENSION DATA(50),IPGM(50),ICHAN(50),IFUN(50) COMMON NSCAN,MULT,IA(51,2) EQUIVALENCE (IA(1,1),IPGM(1)),(IA(1,2),ICHAN(1)) EQUIVALENCE (IA(51,2),NCHAN),(IA(51,1),ITIM3) C C USE THE SWITCH REGISTER AS FOLLOWS C SW 1 SCANR C SW 2 CHANGE # OF CHANNELS PRINTED C SW 3 CHANGE TIME LIMIT FOR TASK EXECUTION C (LOADED AS 30 SEC) C SW 4 PRINT TIME OF DAY C 101 FORMAT("TIME LIM, SEC? _") 102 FORMAT("MEAS TAKING > ",I3," SEC") 103 FORMAT(//"SCAN TIME = ",I5," MSEC") 104 FORMAT("PRINT START, END AT? _") 105 FORMAT("START # TOO BIG") 106 FORMAT("END # TOO BIG") 107 FORMAT(2X"OVERLOAD") 108 FORMAT(" CH # ",I4,1XE13.6,"_") 555 FORMAT(2X"SEC") 109 FORMAT(2X"VDC") 110 FORMAT(2X"HZ") 111 FORMAT(2X"OHMS") 112 FORMAT(2X"FUN ERROR") 113 FORMAT(2X"VAC") 114 FORMAT(/,"TIME IS ",I2,":",I2,":",I2/) 115 FORMAT(/,"50 CHAN MAX IN 51,2") 116 FORMAT(//,"SCANNER-DVM",//) CALL LINK(IT,0,0,0,IA,51,2) IF(NSCAN-77B)1,150,1 150 IT=0 RETURN 1 WRITE(2,116) IF(ISSW(3))11,2 11 WRITE(2,101) READ(1,*)ITIM3 2 IF(NSCAN-2911)200,20,200 20 CALL STCLK(1) IF(50-NCHAN)211,212 211 WRITE(2,115) RETURN 212 IF(ISSW(1))21,22 21 CALL SCNR(DATA,ICHAN,IPGM,NCHAN,ICNT,IFUN) IFLAG=0 GO TO 23 22 CALL SCNB(DATA,ICHAN,IPGM,NCHAN,ICNT,IFUN) IFLAG=-1 23 IF(ICNT-NCHAN)24,26 24 CALL RDCLK(N) IF(N/100-ITIM3)23,25 25 CALL SCNCL WRITE(2,102)ITIM3 RETURN 200 CALL STCLK(1) IF(ISSW(1))201,202 201 CALL SKNR(DATA,ICHAN,IPGM,NCHAN,ICNT,IFUN) IFLAG=0 GO TO 203 202 CALL SKNB(DATA,ICHAN,IPGM,NCHAN,ICNT,IFUN) IFLAG=-1 203 IF(ICNT-NCHAN)204,26 204 CALL RDCLK(N) IF(N-100*ITIM3)203,205 205 CALL SKNCL WRITE(2,102)ITIM3 RETURN 26 CALL RDCLK(ITIM1) CALL DATIM(IH,IM,IS) KCNT=0 27 IF(ICONV(DATA,ICNT,KCNT,-NCHAN))27,28 28 ITIM1 = ITIM1*10 WRITE(6,103)ITIM1 3 IF(ISSW(2))31,310 31 WRITE(2,104) READ(1,*)L,J 310 IF(L)311,311,312 311 L=1 312 IF(J-L)313,32 313 J=L 32 IF(NCHAN-L)34,33 33 IF(NCHAN-J)35,4 34 WRITE(2,105) GO TO 31 35 WRITE(2,106) GO TO 31 4 KCHAN=ICHAN(1)+L-1 DO 44 M=L,J IF(IFLAG)41,42 41 WRITE(6,108)KCHAN, DATA(M) GO TO 43 42 WRITE(6,108)ICHAN(M), DATA(M) 43 ICT =IABS(IFUN(M)) KCHAN=KCHAN+1 GO TO (50,5,6,7,7,8,8,8,81,8,9),ICT 44 CONTINUE GO TO 10 50 IF(ICT-1)55,5 55 WRITE(6,555) GO TO 44 5 WRITE(6,109) GO TO 44 6 WRITE(6,110) GO TO 44 7 WRITE(6,111) GO TO 44 8 WRITE(6,112) GO TO 44 81 WRITE(6,107) GO TO 44 9 WRITE(6,113) GO TO 44 10 IF(ISSW(4))1001,1002 1001 WRITE(6,114)IH,IM,IS 1002 CONTINUE END END$ SUBROUTINE MVERT DIMENSION IDATA(50),ICHAN(50) COMMON NSCAN,MULT,IA(51,2) EQUIVALENCE (IA(1,2),ICHAN(1)),(IA(51,2),NUMB) C C USE THE SWITCH REGISTER AS FOLLOWS C SW5=1 M-VERTER MONITORS 1 CHANNEL C SW5=0 AND: C SW6=0 M-VERTER DOES BLOCK SCAN C SW6=1 M-VERTER DOES RANDOM SCAN C SW7=1 CHANGE # OF CHANNELS PRINTED C 1 FORMAT(//,"M-VERTER",//) 2 FORMAT("MEAS+CONVERSION TAKING> 100 MS",//) 4 FORMAT("PRINT START, END AT? _") 5 FORMAT("START # TOO BIG") 6 FORMAT("END # TOO BIG") 7 FORMAT("DATA+CONVERSION TIME <",I4," MS",/, 14X,"CHAN",7X,"DATA(MV)",/) 8 FORMAT(I8,I11) C CALL LINK(IT,0,0,0,IA,51,2) IF(MULT-77B)110,100,110 100 IT=0 RETURN 110 CALL STCLK(1) ILST=0 IADD=-NUMB WRITE(2,1) IF(ISSW(5))150,120 120 IF(ISSW(6))130,140 130 CALL MVRAN(IDATA,ICHAN,NUMB,IEND) IFLAG=1 GO TO 160 140 CALL MVBLK(IDATA,ICHAN,NUMB,IEND) IFLAG=0 GO TO 160 150 CALL MVMON(IDATA,ICHAN,NUMB,IEND) IFLAG=-1 160 CONTINUE 170 IF(MCONV(IDATA,IEND,ILST,IADD))180,200 180 CALL RDCLK(N2) IF(N2-10)170,170,190 190 CALL MVCL WRITE(2,2) RETURN 200 CALL RDCLK(N2) CALL MVCL N=N2*10 230 IF(ISSW(7))240,245 240 WRITE(2,4) READ(1,*)L,J 245 IF(L)250,250,260 250 L=1 260 IF(J-L)270,280 270 J=L 280 IF(NUMB-L)300,290 290 IF(NUMB-J)310,320 300 WRITE(2,5) GO TO 240 310 WRITE(2,6) GO TO 240 320 KCHAN=ICHAN(1)+L-1 WRITE(6,7)N DO 360 M=L,J IF(IFLAG)330,340,350 330 WRITE(6,8)ICHAN(1),IDATA(M) GO TO 360 340 WRITE(6,8)KCHAN,IDATA(M) KCHAN=KCHAN+1 GO TO 360 350 WRITE(6,8)ICHAN(M),IDATA(M) 360 CONTINUE END END$