1ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner/* 2ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * Copyright (C) 2011 The Android Open Source Project 3ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * All rights reserved. 4ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * 5ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * Redistribution and use in source and binary forms, with or without 6ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * modification, are permitted provided that the following conditions 7ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * are met: 8ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * * Redistributions of source code must retain the above copyright 9ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * notice, this list of conditions and the following disclaimer. 10ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * * Redistributions in binary form must reproduce the above copyright 11ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * notice, this list of conditions and the following disclaimer in 12ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * the documentation and/or other materials provided with the 13ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * distribution. 14ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * 15ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * SUCH DAMAGE. 27ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner */ 28ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 29ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner/* To avoid many issues, always build this as a Unicode program */ 30ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner#define UNICODE 1 31ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner#define _UNICODE 1 32ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner#include <windows.h> 33ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner#include <tchar.h> 34ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner#include <stdio.h> 35ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner#include <stdlib.h> 36ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 37ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner/* A brain-dead 'echo' toolbox program for Windows, because the cmd.exe 38ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner * 'echo' command is too weird to be usable with the NDK. 39ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner */ 40ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 41ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerint main(void) 42ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner{ 43ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner int flagNoNewline = 0; 44ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner int argc; 45ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner TCHAR** argv = CommandLineToArgvW(GetCommandLine(), &argc); 46ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 47ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner int nn; 48ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 498e8fbf4ae7eeff2ca0350d2bac537e78d0c6fb31David 'Digit' Turner /* IMPORTANT: echo should only accept -n as a first option, everything 508e8fbf4ae7eeff2ca0350d2bac537e78d0c6fb31David 'Digit' Turner * else must be treated as part of the input string. 518e8fbf4ae7eeff2ca0350d2bac537e78d0c6fb31David 'Digit' Turner */ 528e8fbf4ae7eeff2ca0350d2bac537e78d0c6fb31David 'Digit' Turner if (argc > 1 && argv[1][0] == L'-' && argv[1][1] == L'n' && argv[1][2] == L'\0') { 538e8fbf4ae7eeff2ca0350d2bac537e78d0c6fb31David 'Digit' Turner flagNoNewline = 1; 54ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner argc--; 55ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner argv++; 56ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner } 57ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 58ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner const TCHAR* comma = L""; 59ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner while (argc > 1) { 60ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner _tprintf(L"%s%s", comma, argv[1]); 61ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner comma = L" "; 62ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner argc--; 63ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner argv++; 64ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner } 65ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 66ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner if (!flagNoNewline) 67aed73a4495adbed0d4e398598344b68eda1a349fAndrew Hsieh _tprintf(L"\n"); 68ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 69ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner return 0; 70ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner} 71