#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
#pragma warning(disable: 4996) // disable warning for getenv()
int main()
{
char *pointer = NULL;
string str;
cout<<"Enter the environment variable: ";
while (cin>>str) {
if(str.compare("exit") == 0) break;
if(pointer = getenv(str.c_str())) {
cout<<endl<<"Value of \""<<str<<"\" Variable: "<<pointer<<endl<<endl<<"Enter the environment variable: ";
}else {
cout<<"No such variables defined."<<endl<<"Enter the environment variable: ";
}
}
}
Wednesday, October 31, 2012
Query system for an environment variable value using C/C++
Today one of my colleague asked me how to query an environment variable using C++. The solution is simple, just use getenv() method. See the below code.
Labels:
c,
c++,
environment,
getenv
Tuesday, October 9, 2012
HttpServer - The Oracle JDK 1.6 Hidden Feature
I have seen this class many a times, but never encountered a scenario to use it. Recently in one of my application I needed to embedded a HTTP server. So I thought, Why not give this class a try !!
HTTP server infrastructure/framework is very simple to implement and is bundled only with the Oracle JDK 1.6. Following are the main classes:
See this link for sun.* package discussions.
HTTP server infrastructure/framework is very simple to implement and is bundled only with the Oracle JDK 1.6. Following are the main classes:
See this link for sun.* package discussions.
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.URLDecoder;
import java.util.List;
import java.util.concurrent.Executors;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class JavaServer
{
public static final String nl = System.getProperty("line.separator");
public static void main(String[] args) throws Exception
{
if(args.length != 2)
{
printUsage();
System.exit(-1);
}
String strPort = null;
String strAddress = null;
for (int i = 0; i < args.length; i++)
{
if(args[i].startsWith("-p")){
strPort = args[i].substring(2, args[i].length()).trim();
}else if(args[i].startsWith("-a")){
strAddress = args[i].substring(2, args[i].length()).trim();
}else
throw new IllegalArgumentException("Unknown command '" + args[i]+ "'");
}
if(strAddress.length() == 0 || strPort.length() == 0)
throw new IllegalArgumentException("Port = " + strPort + ", IP = " + strAddress);
int port = Integer.parseInt(strPort);
InetSocketAddress address = new InetSocketAddress(strAddress, port);
System.out.println("Going to run server on '" + address + "'");
new JavaServer().start(address);
}
private static void printUsage() {
System.out.println("$JavaServer -p<Port> -a<IP Address>");
}
private HttpServer server;
public void start(InetSocketAddress address) throws IOException
{
server = HttpServer.create(address, 0);
server.setExecutor(Executors.newCachedThreadPool());
server.createContext("/", new RootHandler());
server.start();
}
}
class RootHandler implements HttpHandler
{
private static final int BUFFER_SIZE = 1024;
public void handle(HttpExchange exchange) throws IOException
{
String method = exchange.getRequestMethod();
if(method.equalsIgnoreCase("get"))
{
String request = "";
ByteArrayOutputStream baos = new ByteArrayOutputStream(BUFFER_SIZE);
InputStream is = exchange.getRequestBody();
byte[] buff = new byte[BUFFER_SIZE];
while (true)
{
int out = is.read(buff);
if(out == -1)
break;
baos.write(buff, 0, out);
}
is.close();
if (baos.size() > 0) {
request = URLDecoder.decode(baos.toByteArray().toString(), "UTF-8");
} else {
request = null;
}
StringBuilder buf = new StringBuilder();
buf.append("<html><head><title>Simple HTTP Server !!</title></head><body>");
buf.append("<p><pre>");
buf.append(exchange.getRequestMethod() + " " + exchange.getRequestURI() + " " + exchange.getProtocol() + JavaServer.nl);
Headers headers = exchange.getRequestHeaders();
for (String name : headers.keySet()) {
List<String> values = headers.get(name);
for (String value : values) {
buf.append(name + " --> " + value + JavaServer.nl);
}
}
if (request != null) {
buf.append(JavaServer.nl);
buf.append(request);
}
buf.append("</pre></p>");
buf.append("</body></html>\n");
String response = buf.toString();
Headers responseHeaders = exchange.getResponseHeaders();
responseHeaders.set("Content-Type", "text/html");
exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, response.length());
OutputStream res = exchange.getResponseBody();
res.write(response.getBytes());
res.close();
}else
{
String response = "Bad request method !!";
exchange.sendResponseHeaders(HttpURLConnection.HTTP_BAD_METHOD, response.length());
OutputStream res = exchange.getResponseBody();
res.write(response.getBytes());
res.close();
}
exchange.close();
}
}
Steps to run the above code
- Compile it using Oracle JDK 1.6
- Then execute this command on console (without quotes) 'Java JavaServer -p<port number> -a<ipaddress or localhost>' . For example, java JavaServer -p5463 -a127.0.0.1
- Open your browser and type the URL. For example, http://127.0.0.1:5463/
You should see something like this (depends on the browser):
Monday, October 1, 2012
How to open a Java file in read-only mode?
In one of my eclipse plugin based application I wanted to open Java files in read only mode. One option was to use org.eclipse.jface.text.source.SourceViewer , where I could have used JavaSourceViewerConfiguration
for providing Java highlighting and all. But there were two problems:
for providing Java highlighting and all. But there were two problems:
- Source viewer won't inherit the Java editor settings (and if you have modified eclipse Java editor theme), which means your background and foreground in the SourceViewer gets completely messed up.
- Secondly you would lose all the markup and bookmarking facilities available with editors
- Create an editor extension
- Extend the extension class with org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor
- Override some of the methods
- Open your file with this editor
Code
Editor Code
import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor;
@SuppressWarnings("restriction")
public class ReadonlyEd extends CompilationUnitEditor
{
public static final String ID = "read.only";
public ReadonlyEd() {
}
@Override
public boolean isEditable() {
return false;
}
@Override
public boolean isEditorInputModifiable() {
return false;
}
@Override
public boolean isEditorInputReadOnly() {
return true;
}
@Override
public boolean isDirty() {
return false;
}
}
Code for Invoking the Editor
IFile file = ...; // Get the Java file instance
IWorkbenchPage page = ...; // Get the workbench page
FileEditorInput input = new FileEditorInput(file);
try {
IDE.openEditor(window.getActivePage(), input, ReadonlyEd.ID);
} catch (PartInitException e) {
e.printStackTrace();
}
Monday, September 24, 2012
How to hide a window from Win32 Taskbar?
Argh !!! I don't know why but I keep forgetting the ex-style bit for this...
To prevent the window button from being placed on the taskbar, create the unowned window with the WS_EX_TOOLWINDOW extended style. As an alternative, you can create a hidden window and make this hidden window the owner of your visible window.
The Shell will remove a window's button from the taskbar only if the window's style supports visible taskbar buttons. If you want to dynamically change a window's style to one that doesn't support visible taskbar buttons, you must hide the window first (by calling ShowWindow with SW_HIDE), change the window style, and then show the window.
Taken from here: The Taskbar
Tuesday, September 18, 2012
3 easy steps to self-sign a Applet Jar file
Found this link that explains how to self-sign an applet in 3 easy steps:
- keytool -genkey -keystore myKeyStore -alias me
- keytool -selfcert -keystore myKeyStore -alias me
- jarsigner -keystore myKeyStore jarfile.jar me
Subscribe to:
Posts (Atom)