var path;
var WshShell = WScript.CreateObject ("WScript.Shell");
path = WshShell.CurrentDirectory;
var foldaux = path.substr(0, path.lastIndexOf( '/' )+1 );
var folder = "";
var c = "";

for (i=0; i < foldaux.length; ++i) {
    if (foldaux[i] == '/') {
        if (i == 0)
           continue;
        folder = folder + "\\";
    }
    else {
        c = foldaux[i];
        folder = folder + c;
    }
}

ForReading=1, ForWriting=2, ForAppending=8;

// ***********************************************************************************************
// ***********************************************************************************************
// ***********************************************************************************************
// ***********************************************************************************************

// Chama dll SWEDA
// -----------------------------------------------------------------------------------------------
var SI300 = new ActiveXObject("SATscript.DLL.object");
// -----------------------------------------------------------------------------------------------

var CON = WScript.CreateObject ("Scripting.FileSystemObject");
var console = CON.GetStandardStream (1);


// ------------------------     P   R   I   N   T   E   R     -------------------------------

// "Informa cld e CSC se for NFCe."
retorno = SI300.Inicia_Printer_SI300("000001","abc1234567890defghij1234567890klmnop");
console.WriteLine ("Inicia_Printer_SI300 (000001, abc1234567890defghij1234567890klmnop) -> " + retorno);
 
// "Arquivo CONVERSOR.INI criado ou alterado pela biblioteca se a iniciação foi OK."
// ------------------------------------------------------------------------------------------------------

// "********************************** CONFIGURAÇÃO DAS CHAVES *******************************************"
// "Pula uma linha antes das TAGS: <ce> <ad> <tc>. "
retorno = SI300.WriteChavesConversorINI_SI300("ENTER_ALINHAMENTO", "0");
console.WriteLine ("WriteChavesConversorINI_SI300    ENTER_ALINHAMENTO = 0 -> " + retorno);

// "Tamanho do QRCODE. Valores aceitos de 1 a 16 (padrão 3)"
retorno = SI300.WriteChavesConversorINI_SI300("TAMANHO_QRCODE", "3");
console.WriteLine ("WriteChavesConversorINI_SI300    TAMANHO_QRCODE = 3 -> " + retorno);

// "Número de linhas do cabeçalho (padrão é 4). Até 60."
retorno = SI300.WriteChavesConversorINI_SI300("ALTURA_CABECALHO","6");
console.WriteLine ("WriteChavesConversorINI_SI300    ALTURA_CABECALHO = 6 -> " + retorno);

// "Logo e dados do cabeçalho a se// impressos em comprovantes e relatórios."
// Existe OPÇÃO 2 via função 

var cabecalho
cabecalho = "<logo>flecha.bmp</logo>" + "<c>razao social<l></l></c>" + "<c>fantasia<l></l></c>" + "<c>endereço<l></l></c>";
retorno = SI300.WriteChavesConversorINI_SI300("CABECALHO",cabecalho); 
console.WriteLine ("WriteChavesConversorINI_SI300    CABECALHO = " + cabecalho + " -> " + retorno);

// "Localização de eventual arquivo bmp com o logo a ser impresso."
retorno = SI300.WriteChavesConversorINI_SI300("PATH_LOGO_XML",folder + "sweda.bmp");
console.WriteLine ("WriteChavesConversorINI_SI300    PATH_LOGO_XML = sweda.bmp -> " + retorno);

// "Permite a impressão de dados adicionais no DANFE."
retorno = SI300.WriteChavesConversorINI_SI300("[NFCE]INFO_DETALHE_VENDA","1");
console.WriteLine ("WriteChavesConversorINI_SI300    [NFCE]INFO_DETALHE_VENDA = 1 -> " + retorno);

// "Esta URL é impressa no desenho 2D do QRCODE  e concatenado com outros dados para leitura pelo celular."
retorno = SI300.WriteChavesConversorINI_SI300("[NFCE]WS_CONSULTA_QRCODE", "http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode?");
console.WriteLine ("WriteChavesConversorINI_SI300    [NFCE]WS_CONSULTA_QRCODE = http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode? -> " + retorno); 

// "Esta URL é impressa no DANFE para que o consumidor pode fazer consulta pela INTERNET."
retorno = SI300.WriteChavesConversorINI_SI300("[NFCE]URL_CONSULTA","https://www.sefaz.rs.gov.br/NFE/NFE-COM.aspx?");
console.WriteLine ("WriteChavesConversorINI_SI300    [NFCE]URL_CONSULTA = https://www.sefaz.rs.gov.br/NFE/NFE-COM.aspx? -> " + retorno); 

// "DE OLHO NO IMPOSTO"
// "Imprime valor aproximado dos tributos que é opcional caso o estabelecimento exiba as informações em painel."
retorno = SI300.WriteChavesConversorINI_SI300("[SAT]VALOR_TRIBUTOS","1");
console.WriteLine ("WriteChavesConversorINI_SI300    [SAT]VALOR_TRIBUTOS = 1 -> " + retorno);

// "Tempo em milissegundos para espera de impressão. 30000 = 30 segundos."
retorno = SI300.WriteChavesConversorINI_SI300 ("TIMEOUT", "30000");
console.WriteLine ("WriteChavesConversorINI_SI300    TIMEOUT = 30000 -> " + retorno);

// "**************************************** LEITURA DAS CHAVES ************************************************"
retorno = SI300.GetChavesConversorINI_SI300("PORTA");
console.WriteLine ("PORTA= " + retorno);

// "Pula uma linha antes das TAGS: <ce> <ad> <tc>. "
retorno = SI300.GetChavesConversorINI_SI300("ENTER_ALINHAMENTO");
console.WriteLine ("ENTER_ALINHAMENTO= " + retorno);

// "Tamanho do QRCODE. Valores aceitos de 1 a 16 (padrão 3)"
retorno = SI300.GetChavesConversorINI_SI300("TAMANHO_QRCODE");
console.WriteLine ("TAMANHO_QRCODE= " + retorno);

// "Número de linhas do cabeçalho (padrão é 4). Até 60."
retorno = SI300.GetChavesConversorINI_SI300("ALTURA_CABECALHO");
console.WriteLine ("ALTURA_CABECALHO= " + retorno);

// "Logo e dados do cabeçalho a se// impressos em comprovantes e relatórios."
retorno = SI300.GetChavesConversorINI_SI300("CABECALHO");
console.WriteLine ("CABECALHO= " + retorno);

// "Localização de eventual arquivo bmp com o logo a ser impresso."
retorno = SI300.GetChavesConversorINI_SI300("PATH_LOGO_XML");
console.WriteLine ("PATH_LOGO_XML= " + retorno);

// "Permite a impressão de dados adicionais no DANFE."
retorno = SI300.GetChavesConversorINI_SI300("[NFCE]INFO_DETALHE_VENDA");
console.WriteLine ("[NFCE]INFO_DETALHE_VENDA= " + retorno);

// "Esta URL é impressa no desenho 2D do QRCODE  e concatenado com outros dados para leitura pelo celular. "
retorno = SI300.GetChavesConversorINI_SI300("[NFCE]WS_CONSULTA_QRCODE");
console.WriteLine ("[NFCE]WS_CONSULTA_QRCODE= " + retorno); 

// "Esta URL é impressa no DANFE para que o consumidor pode fazer consulta pela INTERNET."
retorno = SI300.GetChavesConversorINI_SI300("[NFCE]URL_CONSULTA");
console.WriteLine ("[NFCE]WS_CONSULTA= " + retorno);

// "DE OLHO NO IMPOSTO"
// "Imprime valor aproximado dos tributos que é opcional caso o estabelecimento exiba as informações em painel."
retorno = SI300.GetChavesConversorINI_SI300("[SAT]VALOR_TRIBUTOS");
console.WriteLine ("[SAT]VALOR_TRIBUTOS= " + retorno);

// "Tempo em milissegundos para espera de impressão. 30000 = 30 segundos."
retorno = SI300.GetChavesConversorINI_SI300("TIMEOUT");
console.WriteLine ("TIMEOUT= " + retorno);

// "--------------- Logo e dados do cabeçalho a se// impressos em comprovantes e relatórios ------------"
// "<<< Existe OPÇÃO 2  >>>>"
cabecalho = "<c>SWEDA INFORMATICA LTDA.<l></l></c>" + 
            "<c>SWEDA<l></l></c>" +
            "<c>Rua Dona Brigida 753 predio<l></l>Vila Mariana São Paulo SP<l></l>04111-123 6821065644<l></l></c>";

retorno = SI300.ConfigCabec_SI300("",folder + "sweda.bmp",cabecalho); 
console.WriteLine ("ConfigCabec_SI300 (sweda.bmp, " + cabecalho + ") -> " + retorno);

// "Logo e dados do cabeçalho a se// impressos em comprovantes e relatórios."
retorno = SI300.GetChavesConversorINI_SI300("CABECALHO");
console.WriteLine ("CABECALHO= " + retorno);

// "**************************************** FUNÇÕES DE IMPRESSÃO *******************************************"
// "[[[[[[[[[[[[[[      G A V E T A     ]]]]]]]]]]]]]]]]]"
retorno = SI300.ModoGaveta_SI300("0");
console.WriteLine ("ModoGaveta_SI300   = " + retorno);
retorno = SI300.AcionaGaveta_SI300();
console.WriteLine ("AcionaGaveta_SI300 = " + retorno);
retorno = SI300.StatusGaveta_SI300();
console.WriteLine ("StatusGaveta_SI300 = " + retorno);

// "##################  I M P R E S S Ã O    DE     T E X T O   #####################"

retorno = SI300.ImprimeTexto_SI300 ("<cabecalho></cabecalho>" + "\r\n");
retorno = SI300.ImprimeTexto_SI300 (folder + "TEF.txt");
console.WriteLine ("ImprimeTexto_SI300  TEF.TXT -> "  + retorno);
retorno = SI300.ImprimeTexto_SI300 ("1234567890" + "\r\n");
console.WriteLine ("ImprimeTexto_SI300  1234567890 -> "  + retorno);

// "<<<<<<<<<<<< IMPRIMIR IMAGEM >>>>>>>>>>>>>>>>>>>>"
// "= 1 = imprimir imagens (.bmp) monocromáticas, ou seja, imprime usando apenas a cor preta, gerando "
// "      uma imagem preta/branca."
// "= 0 = imprimir imagens (.bmp) em tons de cinza, ou seja, imprime a imagem em varias intensidades "
// "      diferentes de cinza."
retorno = SI300.ImprimeImagem_SI300 ("1", folder + "flecha.bmp");
console.WriteLine ("ImprimeImagem_SI300 (1, flecha.bmp) -> " + retorno);
retorno = SI300.ImprimeImagem_SI300 ("0", folder + "flecha.bmp");
console.WriteLine ("ImprimeImagem_SI300 (0, flecha.bmp) -> " + retorno);


// "$$$$$$$$$$$$$$$$$  E X T R A T O   /   D A N F E   $$$$$$$$$$$$$$$$$$$$$"

var XML, dados;

// Leitura do arquivo conteúdo ANSI
arqxml = folder + "CFe.xml";
XML = new ActiveXObject ("Scripting.FileSystemObject");
handxml = XML.OpenTextFile(arqxml, ForReading);
if (handxml.AtEndOfStream == false) {
   dados = handxml.ReadAll();
}
handxml.Close();

console.WriteLine ("Imprime Resumo via do consumidor, informando CFe em string");
retorno = SI300.GeraResumoXML_SI300();
console.WriteLine (retorno);
retorno = SI300.ImprimeXML_SI300(dados);
console.WriteLine ("Resumo Impresso -> " + retorno);

console.WriteLine ("Imprime Completo via do consumidor");
retorno = SI300.ImprimeXML_SI300(arqxml);
console.WriteLine ("Extrato completo do consumidor impresso -> " + retorno);

var arqxml1,arqxml2
arqxml1  = folder + "NFCe-contingencia.xml";
arqxml2  = folder + "NFCe-enviada.xml";

// "A emissão da via do estabelecimento é válida apenas para cupons emitidos em contingência seguindo o manual de"
// "especificação da NFC-e disponibilizado pela SEFAZ."
console.WriteLine ("Informa impressao da loja e do consumidor (NFCE) - completa (padrao)");
retorno = SI300.ViaLojaConsumidorXML_SI300();
console.WriteLine (retorno);
retorno = SI300.ImprimeXML_SI300(arqxml1);
console.WriteLine ("DANFE completo da via da loja e do consumidor impresso -> " + retorno);

console.WriteLine ("Imprime Completo apenas via da loja (NFCE)");
retorno = SI300.ViaApenasLojaXML_SI300();
console.WriteLine (retorno);
retorno = SI300.ImprimeXML_SI300(arqxml1);
console.WriteLine ("DANFE completo da via da loja impresso -> " + retorno);

console.WriteLine ("Informa total recebido (1000.00) para calculo do troco no proximo DANFE (NFCE)");
retorno = SI300.ValorPagoXML_SI300 ("1000.00");
console.WriteLine (retorno);
console.WriteLine ("Imprime endereco do consumidor");
retorno = SI300.PrintEnderecoConsumidorXML_SI300();
console.WriteLine (retorno);
retorno = SI300.ImprimeXML_SI300(arqxml2);
console.WriteLine ("DANFE completo da via do consumidor impressa -> " + retorno);

// "?????????????????    S T A T U S   ???????????????????????????"
// "Índice       Retorno 0                     Retorno 1 "
// "  1    Impressora operacional        Impressora em falha" 
// "  2    Off Line                      On Line "
// "  3    Papel OK                      Fim de papel "
// "  4    Guilhotina não detectada      Guilhotina detectada "
// "  5    Tampa térmica fechada         Tampa térmica aberta "
// "  6    Sem papel sobre o sensor      Papel posicionado sobre o sensor "
// "  7    Gaveta fechada                Gaveta aberta. "
// "  8    Cheque inserido               SEM CHEQUE." 
retorno = SI300.Status_SI300 ("1");  
console.WriteLine ("Operacional?    = " + retorno);
retorno = SI300.Status_SI300 ("2");  
console.WriteLine ("ON/OFF?         = " + retorno);
retorno = SI300.Status_SI300 ("3");  
console.WriteLine ("FIM Papel?      = " + retorno);
retorno = SI300.Status_SI300 ("4");  
console.WriteLine ("Guilhotina?     = " + retorno);
retorno = SI300.Status_SI300 ("5");  
console.WriteLine ("Tampa?          = " + retorno);
retorno = SI300.Status_SI300 ("6");  
console.WriteLine ("Papel acabando? = " + retorno);
retorno = SI300.Status_SI300 ("7");  
console.WriteLine ("Gaveta?         = " + retorno);
retorno = SI300.Status_SI300 ("8");  
console.WriteLine ("Cheque?         = " + retorno);

retorno = SI300.StatusGuilhotina_SI300();
console.WriteLine ("Guilhotina?     = " + retorno);

delete XML
delete SI300





