/* REXX */
	NUMERIC DIGITS 18
	ZocCLS
MAIN:	DIR_PART="C:\_DUMPS" ; OUT_DIR=DIR_PART||"\"
	abst=GET_FILE("SELECT .CFS [.TXS] FILE")
	IN_FILE=F_READ(abst) 
	i=pos("092881",IN_FILE,1)
	if i=0 then 
	   do
	   say " UNKNOWN FILE FORMAT"
	   signal MAIN
	end
	j=pos(x2c(0A),IN_FILE,i)

	abst=""	; IN_FILE=delstr(IN_FILE,1,j)
	do i=1 to length(IN_FILE)
	   CHAR=REORGNIZER(substr(IN_FILE,i,1))
	   abst=abst||CHAR
	end
	call F_WRITE OUT_DIR||F_NAME||".TXT",,1
exit
/* ============================================================== */
F_SPEC:
	parse arg F_PART 
	k=lastpos("\",F_PART)
	if k<>0 then 
	   do
	   DIR_PART=left(F_PART,k-1)
	     F_PART=substr(F_PART,k+1,) 
	end
	_=translate(F_PART," ",".")
	F_NAME=word(_,1)
	F_EXT =word(_,2)
RETURN
/* ============================================================== */
F_CREATE:
	parse arg FILE
	call F_SPEC FILE

	if stream(DIR_PART,"C","QUERY EXISTS")="" then 
	   do
	   call ZocShell MD DIR_PART,1
	end
	_=DIR_PART||"\"||F_PART
	if stream(_,"C","QUERY EXISTS")<>"" then
	   do
	   call ZocShell DEL _,1
	end
	call stream _,"C","OPEN WRITE"
RETURN _
/* ============================================================== */
F_CLOSE:
	parse arg _FILE,SILENT   
	call stream _FILE,"C","CLOSE" 
	if SILENT<>"" then
	   do	
	   say ""
	   say "SAVED TO:"
	   say DIR_PART||"\"
	   say F_PART
	end	
RETURN	
/* ============================================================== */
F_READ:
	parse arg FILE,LENGTH!
	call F_SPEC FILE
	if stream(FILE,"C","query exists")="" then 
	   do
	   say FILE||" NOT FOUND."
	   RETURN ""   
	end
	_=stream(FILE,"C","query size")
	if _=0 then
	   do
	   say "length "||FILE||" =0."
	   RETURN "" 
	end
	if LENGTH!="" then LENGTH!=_
	call stream FILE,"C","OPEN READ"
	_S =charin(FILE,1,LENGTH!)
	call stream FILE,"C","CLOSE" 

	DIGITS_FOR_OFFSET=length(d2x(length(_S)))
	if DIGITS_FOR_OFFSET < 4 then DIGITS_FOR_OFFSET=4       
RETURN _S	
/* ============================================================== */
F_WRITE:
	parse arg FILE,_str,P3                       
	if _str="" then _str=abst
	OUT_FILE=F_CREATE(FILE)
	call charout OUT_FILE,_str
	call F_CLOSE OUT_FILE,P3	
RETURN
/* ============================================================== */
GET_FILE:
	parse arg MSG
	if MSG="" then MSG="SELECT FILE:"
	
L0:	#= ZocGetFilename(MSG, DIR_PART||"\*.*")  
	if #="##CANCEL##" then 
	   do
	   say "BYE"
	   exit
	end
 	if stream(#,"C","QUERY EXISTS")="" then do
    	   say "["||#||"] NOT FOUND.RETRY"
	   signal L0
	end
/*	call F_SPEC # */
RETURN #	
/* ============================================================== */
REORGNIZER: 
	parse arg ?CHAR
	if c2d(?CHAR)>=x2d(66) then RETURN d2c(c2d(?CHAR)-5)
	if c2d(?CHAR)>=x2d(4A) then RETURN d2c(c2d(?CHAR)-9)
	if c2d(?CHAR)=x2d(42) then RETURN d2c(c2d(?CHAR)-3)
	if c2d(?CHAR)>=x2d(36) then RETURN d2c(c2d(?CHAR)-6)
RETURN ?CHAR