declare namespace TopJsProcess {

    export class ProcessStream {
        /**
         * 设置文件编码
         * @param iEncoding 
         */
        setCodec(iEncoding:string):void

        /**
         * 获取设置的文件编码
         */
        codec():string

        /**
         * 设置自动检测Unicode
         * @param iEnabled 
         */
        setAutoDetectUnicode(iEnabled:boolean):void

        /**
         * 是否自动检测Unicode
         */
        isAutoDetectUnicode():boolean

        /**
         * 设置是否每次在写入文件时自动刷新缓存至文件
         * @param iAutoFlush 
         */
        setAutoFlush(iAutoFlush:boolean):void

        /**
         * 是否每次在写入文件时自动刷新缓存至文件
         */
        isAutoFlush():boolean

        /**
         * 是否读取到文件结尾
         */
        atEnd():boolean

        /**
         * 将文件读取位置重置
         */
        reset():void

        /**
         * 刷新缓存至文件
         */
        flush():void

        /**
         * 读取一行,iMaxLen为最大读取长度;iMaxLen=0表示不限制大小；
         * @param iMaxLen 
         */
        readLine(iMaxLen:Number=0):string

        /**
         * 读取全部文件内容
         */
        readAll():string

        /**
         * 读取指定大小文本块
         * @param iMaxLen 
         */
        read(iMaxLen:Number):string

        /**
         * 写入文件
         * @param iText 
         */
        write(iText:string):void
    }


    /**
     * 命令行参数
     */
    export var argv:Array<string>

    /**
     * 标准输出流
     */
    export var stdout:ProcessStream

    /**
     * 标准输入流
     */
    export var stdin:ProcessStream

    /**
     * 标准错误流
     */
    export var stderr:ProcessStream

    /**
     * 获取topjs执行文件路径
     */
    export function topjsBinPath():string

    /**
     * 获取当前进程PID号
     */
    export function pid():number
    

    /**
     * 获取平台名称
     */
    export function platform():string

    /**
     * 获取当前执行的脚本文件路径;(不包含文件名)
     */
    export function evalFileDir():string

    /**
     * 获取当前执行的脚本文件名;
     */
    export function evalFileName():string

    /**
     * 获取当前执行的脚本文件除去后缀后的名称;
     */
    export function evalFileBaseName():string

    /**
     * 创建一个事件对象
     */
    export function createEvent():any

    /**
     * 获取环境变量
     * @param iName 
     */
    export function getEnv(iName:string):string

    /**
     * 设置环境变量
     * @param iName 
     * @param iValue 
     */
    export function setEnv(iName:string, iValue:string):boolean
    
    /**
     * 立即对进程进行垃圾回收;
     */
    export function gc():null

    /**
     * 退出
     * @param iCode 
     */
    export function exit(iCode:Number):void

    /**
     * 开始事件主循环
     */
    export function mainLoop():void


    /**
     * 执行外部命令
     * @param iCmd 
     * @param iArgs 
     */
    export function exec(iCmd:string,iArgs:Array<string>):string

}

export = TopJsProcess;
