EXTERNALINTEGER OMFRCODE EXTERNALINTEGERFNSPEC RETURN CODE EXTERNALROUTINESPEC DESTROY(STRING (64) S) EXTERNALROUTINESPEC COPY(STRING (63) S) EXTERNALSTRINGFNSPEC UINFS(INTEGER ENTRY) EXTERNALINTEGERFNSPEC DSFI(STRING (6) USER, C INTEGER FSYS, TYPE, SET, ADR) SYSTEMROUTINESPEC DISCONNECT(STRING (31) FILE, INTEGERNAME FLAG) SYSTEMROUTINESPEC PHEX(INTEGER MN) SYSTEMINTEGERMAPSPEC COMREG(INTEGER N) SYSTEMROUTINESPEC MOVE(INTEGER L, F, T) SYSTEMROUTINESPEC CHANGEFILESIZE(STRING (31) S, C INTEGER NEWSIZE, INTEGERNAME FLAG) OWNSTRING (32) ARRAY FILENAME(0 : 100) OWNSTRING (8) ARRAY TEMPFILE(0 : 100) OWNINTEGERARRAY RECORDS(0 : 100) OWNINTEGERARRAY CONAD(1 : 100) OWNBYTEINTEGERARRAY MODES(1 : 100) OWNINTEGERARRAY READPTR(1 : 100) OWNSTRING (63) PDFILE OWNSTRING (15) SUBFILE CONSTINTEGER SEG = X'40000' EXTERNALROUTINE OPENOMF(STRING (32) FILE, INTEGER CH, MODE) RECORDFORMAT INRFM(INTEGER CONAD, FILESIZE, A, C STRING (6) B, INTEGER C, D, E, F) SYSTEMROUTINESPEC CONNECT(STRING (32) S, C INTEGER ACCESS, MAXBYTES, PROTECTION, C RECORDNAME R, INTEGERNAME J) RECORD IN(INRFM) SYSTEMROUTINESPEC OUTFILE(STRING (32) S, C INTEGER L, M, P, INTEGERNAME C, F) STRING (6) USER CONSTINTEGER WRT = 1 INTEGER I, MAXFSIZE INTEGER FLAG IF MODE > 10 THEN MODE = MODE-10 AND OMFRCODE = 0 C ELSE OMFRCODE = -1 TEMPFILE(CH) = "" FILENAME(CH) = FILE MODES(CH) = MODE IF MODE = WRT START IF FILE -> PDFILE.("_").SUBFILE THEN START FILE = "T#OMF__" BYTEINTEGER(ADDR(FILE)+6) = '0'+(CH//10) BYTEINTEGER(ADDR(FILE)+7) = '0'+(CH-((CH//10)*10)) TEMPFILE(CH) = FILE FINISH USER = UINFS(1) I = DSFI(USER,-1,12,0,ADDR(MAXFSIZE)) MAXFSIZE = MAXFSIZE*1024 IF COMREG(26)&64 # 0 THEN I = MAXFSIZE C ELSE I = (MAXFSIZE//3)*2 OUTFILE(FILE,SEG,I,0,CONAD(CH),FLAG) IF FLAG # 0 START PRINTSTRING(' OPEN OMF// OUTFILE '.FILE. C ' FAILS, FLAG =') WRITE(FLAG,1) NEWLINES(2) STOP IF OMFRCODE = -1 OMFRCODE = RETURN CODE RETURN FINISH INTEGER(CONAD(CH)+12) = 4 INTEGER(CONAD(CH)+24) = (4096<<16)!2 FINISH ELSE START CONNECT(FILE,0,0,0,IN,FLAG) IF FLAG # 0 START PRINTSTRING(' OPEN OMF// CONNECT '.FILE. C ' FAILS,FLAG=') WRITE(FLAG,1) NEWLINES(2) STOP IF OMFRCODE = -1 OMFRCODE = RETURN CODE RETURN FINISH IF INTEGER(IN_CONAD+12) # 4 START PRINTSTRING(" ".FILE." - HAS INCORRECT FILETYPE ") NEWLINE STOP IF OMFRCODE = -1 OMFRCODE = 1; RETURN FINISH RECORDS(CH) = 0 READPTR(CH) = IN_CONAD+32 CONAD(CH) = IN_CONAD FINISH END ROUTINESPEC NOTOPEN EXTERNALROUTINE WRITEOMF(INTEGER CH, A, L) INTEGER PTR, CFSIZE, FLAG IF CONAD(CH) = 0 THEN NOTOPEN PTR = INTEGER(CONAD(CH))+CONAD(CH) IF L <= 0 START PRINTSTRING(" RECORD LENGTH TOO SMALL ") MONITOR IF OMFRCODE = -1 THEN STOP OMFRCODE = 1 RETURN FINISH RECORDS(CH) = RECORDS(CH)+1 L = L+2 CFSIZE = INTEGER(CONAD(CH)+8) IF INTEGER(CONAD(CH))+L > CFSIZE THEN START CFSIZE = CFSIZE+SEG CHANGEFILESIZE(FILENAME(CH),CFSIZE,FLAG) INTEGER(CONAD(CH)+8) = CFSIZE IF FLAG # 0 START PRINTSTRING(" CHANGEFILESIZE FAILS ON ".FILENAME(CH). C " , FLAG= ") WRITE(FLAG,1) NEWLINES(2) STOP IF OMFRCODE = -1 OMFRCODE = RETURN CODE RETURN FINISH FINISH MOVE(2,ADDR(L)+2,PTR) MOVE(L-2,A,PTR+2) INTEGER(CONAD(CH)) = INTEGER(CONAD(CH))+L END EXTERNALROUTINE READ OMF(INTEGER CH, A, INTEGERNAME L) INTEGER I IF COMREG(26)&X'400000' # 0 THEN PRINTSTRING(" READ OMF//") IF CONAD(CH) = 0 THEN NOTOPEN IF COMREG(26)&X'400000' # 0 START CYCLE I = 4,4,20 PHEX(INTEGER(READPTR(CH)+I)) REPEAT FINISH IF READPTR(CH) >= INTEGER(CONAD(CH))+CONAD(CH) C THEN L = 0 AND RETURN L = 0 MOVE(2,READPTR(CH),ADDR(L)+2) MOVE(L-2,READPTR(CH)+2,A) READPTR(CH) = READPTR(CH)+L L = L-2 END EXTERNALROUTINE CLOSE OMF(INTEGER CH) STRING (63) FILE, REST INTEGER FLAG, NEWSIZE RETURN IF MODES(CH) = 0 IF TEMPFILE(CH) = "" THEN FILE = FILENAME(CH) C ELSE FILE = TEMPFILE(CH) NEWSIZE = (INTEGER(CONAD(CH))+1024)&X'FFFFFC00' CHANGEFILESIZE(FILE,NEWSIZE,FLAG) IF FLAG # 0 START PRINTSTRING(" CHANGEFILESIZE ON ".FILE." FAILS, FLAG = ") WRITE(FLAG,1) NEWLINE STOP IF OMFRCODE = -1 OMFRCODE = RETURN CODE RETURN FINISH INTEGER(CONAD(CH)+8) = NEWSIZE INTEGER(CONAD(CH)+28) = RECORDS(CH) IF TEMPFILE(CH) # "" THEN COPY(TEMPFILE(CH).",".FILENAME( C CH)) AND DESTROY(TEMPFILE(CH)) UNLESS FILE -> ("T#").REST START DISCONNECT(FILE,FLAG) IF FLAG # 0 START PRINTSTRING(" DISCONNECT ON """.FILE. C """. FAILS, FLAG = ") WRITE(FLAG,1) NEWLINE FINISH FINISH CONAD(CH) = 0 RECORDS(CH) = 0 END !! EXTERNALROUTINE NOTEOMF(INTEGER CH, INTEGERNAME POS) POS = READPTR(CH) END !! EXTERNALROUTINE RESETOMF(INTEGER CH, POS) READPTR(CH) = POS END !! ROUTINE NOT OPEN PRINTSTRING(' OMF// FILE NOT OPEN ') STOP IF OMFRCODE = -1 OMFRCODE = 1 RETURN END ENDOFFILE