!! BROUGHT FROM 475 AND MODIFIED FOR 2970 - 9/5/78 !! ! ALAN ANDERSON 3/10/77 !! !!******************************************************* !!* * !!* THIS PROGRAM READS OMF OBJECTS INTO EMAS * !!* FROM A TAPE IN MAGNETIC MEDIA ENGINEERING FORMAT. * !!* * !!************************************************* !! !! TAPE FORMAT IS: !! <--------------FILE 1-------------------> !! *V* *H* *H* *U* *D* *D* *E* *E* *U* !! *O* *D* *D* *H* TM *A*->*A* TM *O* *O* *T* TM < FILE2 >< FILEN > TM !! *L* *R* *R* *L* *T* *T* *F* *F* *L* !! *1* *1* *2* *1* *A* *A* *1* *2* *1* !! !! EXTERNALROUTINE READBTAPE(STRING (63) S) EXTERNALSTRINGFNSPEC UINFS(INTEGER ENTRY) EXTERNALINTEGERFNSPEC DSFI(STRING (6) USER, INTEGER FSYS, C TYPE, SET,ADR) EXTERNALROUTINESPEC OPENOMF(STRING (32) S, INTEGER N, MODE) EXTERNALROUTINESPEC WRITEOMF(INTEGER N, A, L) EXTERNALROUTINESPEC CLOSEOMF(INTEGER CH) EXTERNALROUTINESPEC OPENMT(STRING (6) TAPE) EXTERNALROUTINESPEC READMT(INTEGER AD, INTEGERNAME L, FLAG) EXTERNALROUTINESPEC SKIPMT(INTEGER N) EXTERNALROUTINESPEC SKIPTMMT(INTEGER N) EXTERNALROUTINESPEC REWINDMT EXTERNALROUTINESPEC UNLOADMT SYSTEMINTEGERMAPSPEC COMREG(INTEGER N) EXTERNALROUTINESPEC NEWPDFILE(STRING (63) S) EXTERNALROUTINESPEC CS(STRING (63) S) SYSTEMROUTINESPEC OUTFILE(STRING (32) S, C INTEGER L, M, P, INTEGERNAME C, F) SYSTEMROUTINESPEC CONNECT(STRING (32) S, C INTEGER ACCESS, MAXBYTES, PROTECTION, C RECORDNAME R, INTEGERNAME FLAG) RECORDFORMAT INRFM(INTEGER CONAD, FILESIZE, B, C STRING (6) C, INTEGER D, F, G, H) RECORD IN(INRFM) EXTERNALROUTINESPEC DESTROY(STRING (63) S) EXTERNALROUTINESPEC COPY(STRING (63) S) EXTERNALROUTINESPEC PROMPT(STRING (17) S) SYSTEMROUTINESPEC ETOI(INTEGER A, L) EXTERNALSTRINGFNSPEC DATE EXTERNALSTRINGFNSPEC TIME BYTEINTEGERARRAY B(0 : 4115) CONSTINTEGER EIGHTSEG=X'200000' CONSTINTEGER TM = 1 STRING (8) TAPE INTEGER PDMAXINDEX, PDINDEX, C26, CONAD STRING (56) REST STRING (1) SRCCONV STRING (32) FILE, SEARCHFILE, PDFILE, TAPEFILE, WFILE INTEGER K INTEGER FLAG, NUMFILES, LEN, CDISP, LASTDISP, RLEN, I INTEGER TENS INTEGER MAXFSIZE STRING (6) USER CONSTINTEGER SEG=X'40000' CONSTINTEGER WSIZE = X'100000' CONSTINTEGERARRAY POWER(0 : 4) = C 1,10,100,1000,10000 !! ROUTINE WINDUP !! NEWLINE IF PDFILE#"" THEN DESTROY("OMF#TEMP") IF SRCCONV="Y" THEN DESTROY("OMF#TEMP2") UNLOADMT STOP END !! ROUTINE READLINE(STRING (255) NAME LINE) WHILE NEXTSYMBOL = NL THEN SKIPSYMBOL; ! SKIP BLANK LINES LINE = "" WHILE NEXTSYMBOL # NL THEN LENGTH(LINE) = LENGTH(LINE)+ C 1 AND BYTEINTEGER(ADDR(LINE)+LENGTH(LINE)) = C NEXTSYMBOL AND SKIPSYMBOL SKIPSYMBOL IF LINE=".END" OR LINE="STOP" THEN WINDUP END !! !! USER=UINFS(1) FLAG=DSFI(USER,-1,12,0,ADDR(MAXFSIZE)) MAXFSIZE=MAXFSIZE*1024 C26 = COMREG(26) SEARCHFILE = "" PDFILE = "" SRCCONV = "N" PDINDEX = 1 NUMFILES = 1 PRINTSTRING(" ".DATE." ".TIME." VSN 7 ") !! IF S -> TAPE.(",").REST START UNLESS REST -> SEARCHFILE.(",").PDFILE C THEN SEARCHFILE = REST IF PDFILE = "" THEN PRINTSTRING(" SEARCHING ".TAPE. C " FOR FILE ".SEARCHFILE." ") FINISH ELSE TAPE = S IF PDFILE # "" START ! CONNECT OR CREATE PDFILE CONNECT(PDFILE,0,0,0,IN,FLAG) IF FLAG # 0 START IF FLAG = 152 OR FLAG = 218 C THEN NEWPDFILE(PDFILE) ELSE -> ERRORC FINISH OUTFILE("OMF#TEMP",SEG,MAXFSIZE,0,CONAD,FLAG) IF FLAG # 0 THEN -> ERRORW WFILE = "OMF#TEMP" IF SEARCHFILE="" THENC PRINTSTRING(" FILLING PDFILE ".PDFILE." FROM ".TAPE." ") PRINTSTRING(" ARE FILES TO BE SOURCE CONVERTED? ") PROMPT("Y/N:") READLINE(SRCCONV) IF SRCCONV = "Y" START WFILE = "OMF#TEMP2" OUTFILE(WFILE,SEG,MAXFSIZE,0,CONAD,FLAG) IF FLAG # 0 THEN -> ERRORW FINISH PRINTSTRING(" GIVE MAXIMUM NUMBER OF FILES TO BE READ INTO PDFILE ") PROMPT("DATA:") READLINE(REST) !! PDMAXINDEX = 0 I = 0 WHILE I < LENGTH(REST) THEN CYCLE TENS = POWER(LENGTH(REST)-(I+1)) PDMAXINDEX = PDMAXINDEX+((BYTEINTEGER(ADDR(REST)+I+1)- C '0')*TENS) I = I+1 REPEAT NEWLINE WRITE(PDMAXINDEX,1) NEWLINE FINISH !! OPENMT(TAPE) ! REWINDMT SKIPMT(1); ! GET PAST LABEL CYCLE ; ! THROUGH FILES NEXTF: LEN = 96; ! MAX LEN READMT(ADDR(B(0)),LEN,FLAG); ! HDR1 IF FLAG = TM THEN START PRINTSTRING(" TAPE ENDS ") WINDUP FINISH -> ERRORR UNLESS FLAG = 0 -> ERRORF UNLESS B(6) = X'C8' AND B(7) = X'C4' C AND B(8) = X'D9' AND B(9) = X'F1' IF SEARCHFILE = "" AND PDFILE = "" START PRINTSTRING(" FILE") WRITE(NUMFILES,1) FINISH NUMFILES = NUMFILES+1 ETOI(ADDR(B(10)),10); ! FILE NAME B(9) = 10 TAPEFILE = STRING(ADDR(B(9))) WHILE BYTEINTEGER(ADDR(TAPEFILE) C +LENGTH(TAPEFILE))=X'20' THENC LENGTH(TAPEFILE)=LENGTH(TAPEFILE)-1 IF SEARCHFILE # "" START IF SEARCHFILE = TAPEFILE START PRINTSTRING(" ".SEARCHFILE." FOUND AT LABEL ") WRITE(NUMFILES,1) NEWLINE IF PDFILE#"" START PRINTSTRING(" FILLING".PDFILE." FROM ".TAPE." LABEL ") WRITE(NUMFILES,1) NEWLINE SEARCHFILE="" FINISH FINISH ELSE START SKIPTMMT(3) -> NEXTF FINISH FINISH IF PDFILE = SEARCHFILE = "" C THEN PRINTSTRING(" ".TAPEFILE." ") ! GET PAST HDR2,UHL , TM CYCLE K=1,1,3 READMT(ADDR(B(0)),LEN,FLAG) IF FLAG=TM AND K<3 THEN ->ERRORF REPEAT ->ERRORF UNLESS FLAG=TM !! LEN = 96; ! MAX LEN IF PDFILE = "" START PROMPT("EMASFILENAME:") READLINE(FILE) IF FILE = "NO" THEN WINDUP FINISH ELSE FILE = "OMF#TEMP" IF FILE = "R" THEN SKIPTMMT(2) AND -> NEXTF OPENOMF(FILE,1,1) CYCLE I = 1,1,10000; ! THROUGH DATA BLOCKS LEN = 4116; ! MAX LEN READMT(ADDR(B(0)),LEN,FLAG) EXIT IF FLAG = TM -> ERRORR UNLESS FLAG = 0 LASTDISP = B(6)<<8+B(7)+6 CDISP = 8 UNTIL CDISP > LASTDISP THEN CYCLE RLEN = B(CDISP)<<8+B(CDISP+1) WRITEOMF(1,ADDR(B(CDISP+4)),RLEN-4) CDISP = CDISP+RLEN REPEAT REPEAT CLOSEOMF(1) IF SRCCONV = "Y" THEN CS(FILE.",OMF#TEMP2") IF PDFILE # "" AND C26 # 0 START NEWLINE IF PDFILE # "" THEN PRINTSTRING(TAPEFILE) WRITE(I-1,1) PRINTSTRING(" BLOCK") IF I-1 > 1 THEN PRINTSTRING("S") PRINTSTRING(" READ ") NEWLINE FINISH IF PDFILE # "" THEN COPY(WFILE.",".PDFILE."_".TAPEFILE) SKIPTMMT(1); ! PAST TRAILERS TO NEXT FILE IF PDFILE # "" START PDINDEX = PDINDEX+1 IF PDINDEX >= PDMAXINDEX START PDINDEX = 0 PROMPT("NEXTPDFILE:") READLINE(PDFILE) ! CONNECT OR CREATE PDFILE CONNECT(PDFILE,0,0,0,IN,FLAG) IF FLAG # 0 START IF FLAG = 152 OR FLAG = 218 C THEN NEWPDFILE(PDFILE) ELSE -> ERRORC FINISH PRINTSTRING(" FILLING ".PDFILE." FROM ".TAPE. C " LABEL ") WRITE(NUMFILES+1,1) NEWLINE PRINTSTRING(" GIVE MAXIMUM NUMBER OF FILES TO BE READ INTO PDFILE ") PROMPT("DATA:") READLINE(REST) !! PDMAXINDEX = 0 I = 0 WHILE I < LENGTH(REST) THEN CYCLE TENS = POWER(LENGTH(REST)-(I+1)) PDMAXINDEX = PDMAXINDEX+((BYTEINTEGER(ADDR(REST)+I+1)- C '0')*TENS) I = I+1 REPEAT NEWLINE WRITE(PDMAXINDEX,1) NEWLINE FINISH FINISH REPEAT WINDUP ERRORF: PRINTSTRING(" TAPE FORMAT ERROR ") PRINTSTRING("{ ARE YOU SURE THAT THIS TAPE IS IN BARCHIVE FORMAT? ") WINDUP ERRORC: PRINTSTRING(" CANNOT CONNECT PDFILE ".PDFILE." ") WRITE(FLAG,1) NEWLINE WINDUP ERRORW: PRINTSTRING(" CANNOT CREATE WORKFILE ") WRITE(FLAG,1) NEWLINE WINDUP ERRORR: PRINTSTRING(" READMT FAILS /") WRITE(FLAG,1) WINDUP END ENDOFFILE