%EXTERNAL %ROUTINE DETAB(%STRING(63) FILE) %EXTERNAL %ROUTINE %SPEC DEFINE(%STRING(63) S) %EXTERNAL %ROUTINE %SPEC DESTROY(%STRING(63) FILES) %EXTERNAL %ROUTINE %SPEC COPY(%STRING(63) FILE LIST) %EXTERNAL %ROUTINE %SPEC CLOSE STREAM(%INTEGER S) %EXTERNAL %ROUTINE %SPEC RENAME(%STRING(63)FILES) %EXTERNAL %ROUTINE %SPEC CLEAR(%STRING(63) DEF) %EXTERNAL %INTEGER %FNSPEC OUTPOS %EXTERNAL %INTEGER %FN %SPEC EXIST(%STRING(63) FILE) %CONST %INTEGER SAME = 22, DIFFERENT = 17, EM = 25, TAB = 9 %INTEGER MODE %INTEGER X %CONST %STRING(10) TEMP FILE = "TMP#DETAB" %STRING(63) INFILE, OUTFILE %IF FILE -> INFILE . ("/") . OUTFILE %OR %C FILE -> INFILE . (",") . OUTFILE %START %IF INFILE = OUTFILE %THEN MODE = SAME %ELSE MODE = DIFFERENT %FINISH %ELSE %START INFILE = FILE; OUTFILE = FILE MODE = SAME %FINISH %IF EXIST(INFILE) = 0 %START PRINTSTRING("DETAB fails - file ".INFILE." does not exist, or ". %C "no access.") %RETURN %FINISH %IF EXIST(TEMP FILE) # 0 %THEN DESTROY(TEMP FILE) DEFINE("ST1,".IN FILE) %IF MODE = SAME %THEN DEFINE("ST2,".TEMP FILE) %C %ELSE DEFINE("ST2,".OUTFILE) SELECT INPUT(1) SELECT OUTPUT(2) %CYCLE READCH(X) %IF X = EM %THEN %EXIT %IF X = TAB %START SPACE %UNTIL OUTPOS & 7 = 0 %FINISH %ELSE %START PRINT CH (X) %FINISH %REPEAT CLOSESTREAM(1) CLOSE STREAM(2) %IF MODE = SAME %START COPY(TEMPFILE.",".OUTFILE) DESTROY(TEMP FILE) %FINISH %END %ENDOFFILE