LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Specifying screen coordinates in printf using LabView RT 2009

Solved!
Go to solution

According to the help documentation in LabView 2011 "Printf (LabVIEW Manager Function)", the conversion character of 'q' is supposed to reference a point. The actual help text is "q Point (passed by value) as %d,%d representing horizontal, vertical coordinates". Is this a valid conversion character for LabView RT 2009? If so, then does anyone have an example of using these characters to print at row 10, column 1 on the console? I'm tried many combinations like: printf("%dqTest Row",(10,1)), etc.

0 Kudos
Message 1 of 2
(2,195 Views)
Solution
Accepted by topic author daryl178

LabVIEW Real-Time does not inherently have a "console" - it has an "output stream".  There is no published API to allow you to jump around on the console natively (don't cross the streams) - you can't even do it with the LabVIEW Manager functions (it literally prints a dot in that pixel location, not text).  

 

Now, I didn't tell you this, but if you happen to have a target with video memory (like a PXI system, definitely NOT a cRIO or cFP) and you happen to know the address of where video memory sits on your system <cough> 0x0B8000 </cough>, you can directly write ascii characters to specific areas on the screen - just like they did back in the DOS days.  

 

 

#include <iostream>
#include <windows.h>

void VGAChar(unsigned int row, unsigned int col, char c, unsigned char attr) {
    static volatile char *video_mem = (char *)0x0B8000;
    unsigned int pos = ((row * 80) + col)*2;

    video_mem[pos] = c;
    video_mem[pos+1] = attr;
}

void VGAString( unsigned int row, unsigned int col, char * str, unsigned char attr) {
    int i = 0;
    while (str[i] != '\0')
    {
        VGAChar(row+(col+i)/80, (col+i)%80, str[i], attr);   /* print each character */
        i++;
    }
}

int main (void)
{
    char buffer[ 100 ];
    sprintf( buffer, "Hello, my DOS world!" );
    VGAString( 10, 10, buffer, FOREGROUND_BLUE | FOREGROUND_RED );   // prints in PURPLE at ROW 10, COL 10.

    return 0;
}

 

 Of course I don't condone this, and it's definitely NOT supported (and only works on PharLap-based targets with a video console), but it IS a lot of fun.  🙂

 

-Danny

Message 2 of 2
(2,180 Views)