' ConcealFile.inc
' Created by Ben Sherratt

CONST FilePointer = "<" + CHR$(35) + "FileStart" + CHR$(35) + ">"
CONST FilePointerEnd = "<" + CHR$(35) + "FileEnd" + CHR$(35) + ">"

DIM FileOne$ AS STRING
DIM FileTwo$ AS STRING
DIM FileWrite$ AS STRING
DIM Position AS INTEGER
DIM EndPosition AS INTEGER
DIM FileStream AS QFILESTREAM

SUB ConcealFile (FileOne AS STRING, FileTwo AS STRING, FileThree AS STRING)
If FileExists(FileOne) Then
    If FileExists(FileTwo) Then
        If Right$(FileThree,1) <> "\" Or Right$(FileThree,1) <> "/" Then
            FileStream.Open(FileOne,fmOpenRead)
            FileOne$ = FileStream.ReadStr(FileStream.Size)
            If Tally(FileOne$,FilePointer) > 0 Or Tally(FileOne$,FilePointerEnd) > 0 then
                ShowMessage "There is a file already concealed in this file"
                Exit Sub
            End If
            FileStream.Close
            
            FileStream.Open(FileTwo,fmOpenRead)
            FileTwo$ = FileStream.ReadStr(FileStream.Size)
            FileStream.Close
            
            If Tally(FileTwo$,FilePointer) > 0 Or Tally(FileTwo$,FilePointerEnd) > 0 then
                $ESCAPECHARS ON
                ShowMessage "This file will not conceal correctly. We are sorry.\nThere will be future considerations to correct this."
                $ESCAPECHARS OFF
                Exit Sub
            End If
            
            FileStream.Open(FileThree,fmCreate)
            FileStream.WriteStr(FileOne$,Len(FileOne$))
            
            FileStream.WriteStr(FilePointer,Len(FilePointer))
            
            FileStream.WriteStr(FileTwo$,Len(FileTwo$))
            
            FileStream.WriteStr(FilePointerEnd,Len(FilePointerEnd))
            
            FileStream.Close
        Else
            Showmessage ("File " + FileThree + " is invalid!")
        End If
    Else
        Showmessage ("File " + FileTwo + " does not exist!")
    End If
Else
    Showmessage ("File " + FileOne + " does not exist!")
End If
END SUB

SUB ExtractFile (FileOne AS STRING, FileTwo AS STRING)
If FileExists(FileOne) Then
    If Right$(FileTwo,1) <> "\" Or Right$(FileTwo,1) <> "/" Then
        FileStream.Open(FileOne,fmOpenRead)
        FileOne$ = FileStream.ReadStr(FileStream.Size)
        FileStream.Close
        
        If Tally(FileOne$,FilePointer) = 0 and Tally(FileOne$,FilePointerEnd) = 0 then
            ShowMessage "No concealed file found!"
            Exit Sub
        End If
        
        Position = RInstr(FileOne$,FilePointer) + Len(FilePointer)
        EndPosition = RInstr(FileOne$,FilePointerEnd) - 1
        FileWrite$ = Mid$(FileOne$,Position,EndPosition - Position)
        
        FileStream.Open(FileTwo,fmCreate)
        FileStream.WriteStr(FileWrite$,Len(FileWrite$))
        FileStream.Close
    Else
        Showmessage ("File " + FileTwo + " is invalid!")
    End If
Else
    Showmessage ("File " + FileOne + " does not exist!")
End If    
END SUB
