Exemple #1
0
static void _DrawPercentLabel( short xc, short yc, short xradius,
            short yradius, float xratio, float yratio, float value )
//==================================================================

/*  Draws the percents on the pie graph.  This function was created to
    save some space.
*/

{
    short               x, y;
    short               length;
    short               pixels;
    char                buffer[ 10 ];

    _setcolor( _PGPalette[ 1 ].color );
    _StringPrint( buffer, _PG_DECFORMAT, 1, 100 * value );
    length = strlen( buffer );
    buffer[ length ] = '%';
    buffer[ length + 1 ] = '\0';
    pixels = _getgtextextent( buffer );
    x = xc + xratio * ( _CharWidth + xradius );
    y = yc - yratio * ( 3 * _CharHeight / 2 + yradius ) - _CharHeight / 2;
    if( xratio > 0 ) {
        _moveto( x, y );
    } else {
        _moveto( x - pixels, y );
    }
    _outgtext( buffer );
}
Exemple #2
0
static void RasterUpdate (int xLeft, int yTop, int nScaling)
{
    int x, y;
    int nStep;

    LT_GraphicsClearScreen ();

    nStep = MIN (FIELD_WIDTH / nRasterWidth, FIELD_HEIGHT / nRasterHeight);

    if (nStep == 0) nStep = 1;

    _setcolor (15);
    _rectangle (_GFILLINTERIOR,
                (0                     - xLeft) / nScaling,
                (0                     - yTop)  / nScaling,
                (nRasterWidth  * nStep - xLeft) / nScaling,
                (nRasterHeight * nStep - yTop)  / nScaling);

    _setcolor (0);

    for (x = 0; x < nRasterWidth; x++)
    {
        for (y = 0; y < nRasterHeight; y++)
        {
            if ((pRaster [y * nRasterByteWidth + x / 8] << x % 8) & 0x80)
            {
                _rectangle (_GFILLINTERIOR,
                    (x       * nStep - xLeft) / nScaling,
                    (y       * nStep - yTop)  / nScaling,
                    ((x + 1) * nStep - xLeft) / nScaling,
                    ((y + 1) * nStep - yTop)  / nScaling);
            }
        }
    }

    _setcolor (7);

    for (x = 0; x <= nRasterWidth; x++)
    {
        _moveto ((x * nStep             - xLeft) / nScaling,
                 (0                     - yTop)  / nScaling);
        _lineto ((x * nStep             - xLeft) / nScaling,
                 (nRasterHeight * nStep - yTop)  / nScaling);
    }

    for (y = 0; y <= nRasterHeight; y++)
    {
        _moveto ((0                    - xLeft) / nScaling,
                 (y * nStep            - yTop)  / nScaling);
        _lineto ((nRasterWidth * nStep - xLeft) / nScaling,
                 (y * nStep            - yTop)  / nScaling);
    }
}
Exemple #3
0
void main(void)
{
    int x1, y1, x2, y2, color, index;
    
    _setvideomode(_VRES16COLOR);
    
    //draw 10,000 points
    for(index = 0; index < 1000; index++)
    {
        x1 = rand() % 640;
        y1 = rand() % 480;
        x2 = rand() % 640;
        y2 = rand() % 480;
        
        color = rand() % 16;
        
        _setcolor(color);
        _moveto(x1,y1);
        _lineto(x2,y2);
    }
    
    while(!kbhit()) {}
    
    _setvideomode(_DEFAULTMODE);
}
Exemple #4
0
_WCRTLINK short _WCI86FAR _CGRAPH _arc( short x1, short y1, short x2, short y2,
                                        /*====================*/ short x3, short y3, short x4, short y4 )

/* This function draws an elliptical arc.  The virtual ellipse is defined by
   the rectangle whose opposite corners are ( x1, y1 ) and ( x2, y2 ).  The
   intersections of the vectors from the center of the ellipse to the points
   ( x3, y3 ) and ( x4, y4 ) define the start and end points respectively
   where the arc is drawn in a counter clockwise direction. */

{
    short           success;

    if( _GrProlog() ) {
        success = _L2arc( _VtoPhysX( x1 ), _VtoPhysY( y1 ),
                          _VtoPhysX( x2 ), _VtoPhysY( y2 ),
                          _VtoPhysX( x3 ), _VtoPhysY( y3 ),
                          _VtoPhysX( x4 ), _VtoPhysY( y4 ) );
        if( success ) {
            _moveto( _GetLogX( _ArcInfo.end.xcoord ),
                     _GetLogY( _ArcInfo.end.ycoord ) );
        }
        _GrEpilog();
    } else {
        success = 0;
    }
    return( success );
}
void Zeichne_stueck(void)
{
  short hoehe_pt,laenge_pt,start_pt,za;

  hoehe_pt=Unit2PntY(durchm);
  laenge_pt=Unit2PntX(laenge);
  start_pt=Unit2PntY(idurchm);

  _setvieworg(0,50);
  /* Untere Haelfte */
  for (za=0;za<laenge_pt;za++)
    {
      _moveto(za,(short)(start_pt/2));
      _lineto(za,(short)(hoehe_pt/2)-1);
    }
  /* rahmen: */ _moveto(laenge_pt-1,1);
		_lineto(laenge_pt-1,(short)(hoehe_pt/2)-1);
}
Exemple #6
0
main()
{
    _setvideomode( _VRES16COLOR );
    _moveto( 100, 100 );
    _lineto( 540, 100 );
    _lineto( 320, 380 );
    _lineto( 100, 100 );
    getch();
    _setvideomode( _DEFAULTMODE );
}
/* Grafikbildschirm einrichten */
void SimBildschirmmaske(void)
{
  char buf_l[20],buf_d[20];

  sprintf(buf_l,"%6.2f",(float)laenge/100.0F);
  sprintf(buf_d,"%6.2f",(float)durchm/100.0F);

  _setcolor(7);
  _moveto(0,431);
  _lineto(640,431);
  _settextposition(1,1);

   _outtext(" Simulator:   � Pausefunktion: Stop stArt � Trace: troN troFf | Ende: ESC\n");
  _moveto(0,7);
  _lineto(640,7);
  _outtext("X-Drm �:                  Werkzeug: T01 (Ref)        Koordinaten:INC \n");
  _outtext("Z-Pos  :                  Trace   : Aus \n");
  _outtext("\nWerkst�ck: l=");
  _outtext(buf_l);
  _outtext("mm  �=");
  _outtext(buf_d);
  _outtext("mm            Status:\nMeldung  :");

  _moveto(0,7);
  _lineto(640,7);
  _moveto(0,48);
  _lineto(640,48);
  _moveto(0,175);
  _lineto(640,175);

  /* Graphicfenster */
  _setviewport(0,49,639,174);
  _setvieworg(0,50);

  Zeichne_stueck();

  /* Maschinen-NP */
  _ellipse(_GFILLINTERIOR,2,2,-2,-2);
}
Exemple #8
0
void press_key()
//==============

//  Display a message and wait for the user to press a key

{
    int                 len;
    char                *msg;
    struct _fontinfo    info;

    _getfontinfo( &info );
    msg = " Press any key ";
    len = _getgtextextent( msg );
    _setcolor( 4 );
    _rectangle( _GFILLINTERIOR, xmax - len, 0,
                                xmax - 1, info.pixheight + 2 );
    _setcolor( 15 );
    _moveto( xmax - len, 1 );
    _outgtext( msg );
    getch();
}
Exemple #9
0
static void SeparatorOutput (SEPARATOR *pSep,
                             int nColor, int OutputMode,
                             int xLeft, int yTop, int nScaling)
{
    if (pSep == NULL)
        return;

    _setcolor (nColor);

    switch (OutputMode)
    {
        case SEPOUT_LINE:   break;
        case SEPOUT_DASH_1: _setlinestyle (0xf0f0); break;
        case SEPOUT_DASH_2: _setlinestyle (0x0f0f); break;
    }

    switch (pSep -> Type)
    {
        default:
            break;

        case SEP_VERT:
        case SEP_HORZ:
            _moveto ((pSep -> xBegin - xLeft) / nScaling,
                     (pSep -> yBegin - yTop)  / nScaling);
            _lineto ((pSep -> xEnd   - xLeft) / nScaling,
                     (pSep -> yEnd   - yTop)  / nScaling);
            break;

        case SEP_RECT:
            _rectangle (_GBORDER,
                        (pSep -> xBegin - xLeft) / nScaling + 3,
                        (pSep -> yBegin - yTop)  / nScaling + 3,
                        (pSep -> xEnd   - xLeft) / nScaling - 3,
                        (pSep -> yEnd   - yTop)  / nScaling - 3);
            break;
    }

    _setlinestyle (0xffff);
}
Exemple #10
0
_WCRTLINK short _WCI86FAR _CGRAPH _pg_vlabelchart( chartenv _WCI86FAR *env,
                            short x, short y, short color, char _WCI86FAR *label )
//===========================================================================

/*  Draws vertical label on the chart.  Coordinates are relative to the
    upper left corner of the chartwindow.   */

{
    char                buffer[ 2 ];

    _setcolor( _PGPalette[ color ].color );
    buffer[ 1 ] = '\0';
    x += env->chartwindow.x1;
    y += env->chartwindow.y1;
    while( *label != '\0' ) {
        buffer[ 0 ] = *label;
        _moveto( x + ( _CharWidth - _getgtextextent( buffer ) ) / 2, y );
        _outgtext( buffer );
        ++label;
        y += _CharHeight;
    }
    return( 0 );
}
Exemple #11
0
static void BreakingUpdate (int xLeft, int yTop, int nScaling)
{
    int x, y;
    int nStep;

    LT_GraphicsClearScreen ();

    nStep = MIN (FIELD_WIDTH / nRasterWidth, FIELD_HEIGHT / nRasterHeight);

    if (nStep == 0)
        nStep = 1;

    _setcolor (15);
    _rectangle (_GFILLINTERIOR,
                (0                     - xLeft) / nScaling,
                (0                     - yTop)  / nScaling,
                (nRasterWidth  * nStep - xLeft) / nScaling,
                (nRasterHeight * nStep - yTop)  / nScaling);

    for (x = 0; x < nRasterWidth; x++)
    {
        for (y = 0; y < nRasterHeight; y++)
        {
            if ((pRaster [y * nRasterByteWidth + x / 8] << x % 8) & 0x80)
                _setcolor (0);
            else if (y == yRasterBreakLine)
                _setcolor (12);
            else if (y >= yRasterUpBreakLimit && y <= yRasterDownBreakLimit)
                _setcolor (14);
            else
                continue;

            _rectangle (_GFILLINTERIOR,
                (x       * nStep - xLeft) / nScaling,
                (y       * nStep - yTop)  / nScaling,
                ((x + 1) * nStep - xLeft) / nScaling,
                ((y + 1) * nStep - yTop)  / nScaling);
        }
    }

    _setcolor (7);

    for (x = 0; x <= nRasterWidth; x++)
    {
        _moveto ((x * nStep             - xLeft) / nScaling,
                 (0                     - yTop)  / nScaling);
        _lineto ((x * nStep             - xLeft) / nScaling,
                 (nRasterHeight * nStep - yTop)  / nScaling);
    }

    for (y = 0; y <= nRasterHeight; y++)
    {
        _moveto ((0                    - xLeft) / nScaling,
                 (y * nStep            - yTop)  / nScaling);
        _lineto ((nRasterWidth * nStep - xLeft) / nScaling,
                 (y * nStep            - yTop)  / nScaling);
    }

    _setcolor (9);

    for (y = 0; y <= nRasterHeight; y++)
    {
        _rectangle (_GFILLINTERIOR,
            ((nRasterWidth + 1) * nStep - xLeft) / nScaling,
            (y                  * nStep - yTop)  / nScaling,
            ((aRasterHystogram [y] + nRasterWidth + 1)
                                * nStep - xLeft) / nScaling,
            ((y + 1)            * nStep - yTop)  / nScaling);
    }
}
Exemple #12
0
static void StringsUpdate (int xLeft, int yTop, int nScaling)
{
    STRING *pString;
    ROOT        *pRoot;
    int nString;
    int nColor;
    int nDustShift;
    int i;
    unsigned old_style;

    LT_GraphicsClearScreen ();

    for (pString = pStringsUpList, nString = 0;
             pString != NULL;
                 pString = pString -> pDown, nString++)
    {
        nColor     = NUMBER_TO_COLOR (nString);
        nDustShift = 2 * (nString % 6 + 1);

        _setcolor (nColor + 8);
        _rectangle (_GBORDER,
                    (pString -> xLeft   - xLeft) / nScaling,
                    (pString -> yTop    - yTop)  / nScaling,
                    (pString -> xRight  - xLeft) / nScaling,
                    (pString -> yBottom - yTop)  / nScaling);

        for (i = 0; i < pString -> nLetters; i++)
        {
            pRoot = cf::Roots::at(pString -> pLettersList [i]);
            _setcolor ((pRoot -> bType & ROOT_SPECIAL_LETTER) ? 15 : nColor);
            _rectangle (_GFILLINTERIOR,
                (pRoot -> xColumn - xLeft) / nScaling + nDustShift,
                (pRoot -> yRow    - yTop)  / nScaling,
                (pRoot -> xColumn + pRoot ->nWidth  - 1
                                        - xLeft) / nScaling + nDustShift,
                (pRoot -> yRow    + pRoot ->nHeight - 1
                                        - yTop)  / nScaling);
        }

        _setcolor (nColor + 8);

        for (i = 0; i < pString -> nDust; i++)
        {
            pRoot = cf::Roots::at(pString -> pDustList [i]);

            if (pRoot -> bType & ROOT_USED)
                continue;

            _rectangle (_GBORDER,
                (pRoot -> xColumn - xLeft) / nScaling + nDustShift,
                (pRoot -> yRow    - yTop)  / nScaling,
                (pRoot -> xColumn + pRoot ->nWidth - 1
                                        - xLeft) / nScaling + nDustShift,
                (pRoot -> yRow    + pRoot ->nHeight - 1
                                        - yTop)  / nScaling);
        }

        _setcolor (15);

        for (i = 0; i < pString -> nDust; i++)
        {
            pRoot = cf::Roots::at(pString -> pDustList [i]);

            if (pRoot -> bType & ROOT_USED)
                continue;

            _rectangle (_GBORDER,
                (pRoot -> xColumn - xLeft) / nScaling,
                (pRoot -> yRow    - yTop)  / nScaling,
                (pRoot -> xColumn + pRoot ->nWidth - 1
                                        - xLeft) / nScaling,
                (pRoot -> yRow    + pRoot ->nHeight - 1
                                        - yTop)  / nScaling);
        }

        _setcolor (nColor + 8);

        old_style = _getlinestyle ();
        _setlinestyle (0xcccc);

        _moveto ((pString -> xLeft  - xLeft) / nScaling,
                 (pString -> yMin   - yTop)  / nScaling);
        _lineto ((pString -> xRight - xLeft) / nScaling,
                 (pString -> yMin   - yTop)  / nScaling);

        _moveto ((pString -> xLeft  - xLeft) / nScaling,
                 (pString -> yMax   - yTop)  / nScaling);
        _lineto ((pString -> xRight - xLeft) / nScaling,
                 (pString -> yMax   - yTop)  / nScaling);
        _setlinestyle (old_style);

        _setcolor (12);
        _rectangle (_GBORDER,
                    (pString -> xLeft   - xLeft) / nScaling,
                    (pString -> yTop    - yTop)  / nScaling,
                    (pString -> xRight  - xLeft) / nScaling,
                    (pString -> yBottom - yTop)  / nScaling);

        _setcolor (15);
        _moveto ((pString -> xLeft         - xLeft) / nScaling,
                 (pString -> yMiddleTop    - yTop)  / nScaling);
        _lineto ((pString -> xRight        - xLeft) / nScaling,
                 (pString -> yMiddleTop    - yTop)  / nScaling);

        _moveto ((pString -> xLeft         - xLeft) / nScaling,
                 (pString -> yMiddleBottom - yTop)  / nScaling);
        _lineto ((pString -> xRight        - xLeft) / nScaling,
                 (pString -> yMiddleBottom - yTop)  / nScaling);
    }

    SeparatorsOutput (xLeft, yTop, nScaling);
}
Exemple #13
0
static void CurrentStringUpdate (int xLeft, int yTop, int nScaling)
{
    ROOT *pRoot;
    int i;
    unsigned old_style;

    LT_GraphicsClearScreen ();

    for (i = 0; i < String.nLetters; i++)
    {
        pRoot = cf::Roots::at(String.pLettersList[i]);

        _setcolor ((pRoot -> bType & ROOT_SPECIAL_LETTER) ? 15 : 10);
        _rectangle (_GFILLINTERIOR,
            (pRoot -> xColumn                       - xLeft) / nScaling,
            (pRoot -> yRow                          - yTop)  / nScaling,
            (pRoot -> xColumn + pRoot ->nWidth  - 1 - xLeft) / nScaling,
            (pRoot -> yRow    + pRoot ->nHeight - 1 - yTop)  / nScaling);
    }

    _setcolor (10);

    for (i = 0; i < String.nDust; i++)
    {
        pRoot = cf::Roots::at(String.pDustList[i]);

        _rectangle (_GBORDER,
            (pRoot -> xColumn                        - xLeft) / nScaling - 1,
            (pRoot -> yRow                           - yTop)  / nScaling - 1,
            (pRoot -> xColumn + pRoot -> nWidth  - 1 - xLeft) / nScaling + 1,
            (pRoot -> yRow    + pRoot -> nHeight - 1 - yTop)  / nScaling + 1);
    }

    old_style = _getlinestyle ();
    _setlinestyle (0xcccc);

    _moveto ((String.xLeft  - xLeft) / nScaling,
             (String.yMin   - yTop)  / nScaling);
    _lineto ((String.xRight - xLeft) / nScaling,
             (String.yMin   - yTop)  / nScaling);

    _moveto ((String.xLeft  - xLeft) / nScaling,
             (String.yMax   - yTop)  / nScaling);
    _lineto ((String.xRight - xLeft) / nScaling,
             (String.yMax   - yTop)  / nScaling);
    _setlinestyle (old_style);

    _setcolor (12);
    _rectangle (_GBORDER,
                (String.xLeft   - xLeft) / nScaling,
                (String.yTop    - yTop)  / nScaling,
                (String.xRight  - xLeft) / nScaling,
                (String.yBottom - yTop)  / nScaling);

    _setcolor (15);
    _moveto ((String.xLeft         - xLeft) / nScaling,
             (String.yMiddleTop    - yTop)  / nScaling);
    _lineto ((String.xRight        - xLeft) / nScaling,
             (String.yMiddleTop    - yTop)  / nScaling);

    _moveto ((String.xLeft         - xLeft) / nScaling,
             (String.yMiddleBottom - yTop)  / nScaling);
    _lineto ((String.xRight        - xLeft) / nScaling,
             (String.yMiddleBottom - yTop)  / nScaling);
}
Exemple #14
0
static void HystogramUpdate (int xLeft, int yTop, int nScaling)
{
    char szBuffer [32];
    int i;
    int nMaxValue;
    int iMaxColumn;
    struct textsettings ts;
    int nCharHeight;
	ROOT *pRoot;//Rom

    LT_GraphicsClearScreen ();

    nMaxValue  = 0;
    iMaxColumn = 0;

	/**/
    for (pRoot = cf::Roots::first(); pRoot < pAfterRoots; pRoot++)
    {
		if(pRoot->nBlock == pDebugBlock->nNumber)
		{
			int nColor = 8;

			if (pRoot -> bType & ROOT_LETTER)       nColor |= 1;
			if (pRoot -> bType & ROOT_RECOGNIZED)   nColor |= 2;
                        if (pRoot->isLayoutDust())              nColor |= 4;

			if (pRoot -> bType & ROOT_DEBUG)        nColor = 14;

			_setcolor (nColor);

			_rectangle (_GFILLINTERIOR,
				(pRoot -> xColumn - xLeft) / nScaling,
				(pRoot -> yRow    - yTop)  / nScaling,
				(pRoot -> xColumn + pRoot ->nWidth  - 1 - xLeft) / nScaling,
				(pRoot -> yRow    + pRoot ->nHeight - 1 - yTop)  / nScaling);
		}
    }
	/**/

    for (i = 0; i < nHystColumns; i++)
    {
        if (nMaxValue < pHystogram [i])
        {
            nMaxValue  = pHystogram [i];
            iMaxColumn = i;
        }
    }

    if (nMaxValue < 10)
        nMaxValue = 10;

    _gettextsettings (&ts);

    for (i = 0; i < nHystColumns; i++)
    {
        if (pHystogram [i] == 0)
        {

        }
        else
        {
            _setcolor (9);

            _rectangle (_GFILLINTERIOR,
                (i * VIEW_WIDTH / nHystColumns + VIEW_LEFT
                                                     - xLeft) / nScaling,
                (VIEW_BOTTOM - pHystogram [i] * VIEW_HEIGHT / nMaxValue
                                                     - yTop)  / nScaling,
                ((i + 1) * VIEW_WIDTH / nHystColumns + VIEW_LEFT
                                                     - xLeft) / nScaling,
                (VIEW_BOTTOM
                                                     - yTop)  / nScaling);
        }
    }

    _setcolor (12);

    _moveto (((xDebugVertLine - pDebugBlock -> Rect.xLeft)
                  * VIEW_WIDTH / nHystColumns
                        + VIEW_WIDTH / nHystColumns / 2
                        + VIEW_LEFT
                        - xLeft) / nScaling, 0);
    _lineto (((xDebugVertLine - pDebugBlock -> Rect.xLeft)
                  * VIEW_WIDTH / nHystColumns
                        + VIEW_WIDTH / nHystColumns / 2
                        + VIEW_LEFT
                        - xLeft) / nScaling, SCREEN_HEIGHT);

    _setcolor (15);
    _settextalign (_RIGHT, _TOP);
    nCharHeight = VIEW_HEIGHT / 10 / nScaling / 2;
    _setcharsize (nCharHeight, nCharHeight / 2);

    for (i = 0; i < nMaxValue - nMaxValue / 20; i += MAX (nMaxValue / 10, 1))
    {
        _moveto ((VIEW_LEFT                                 - xLeft)/ nScaling,
                 (VIEW_BOTTOM - i * VIEW_HEIGHT / nMaxValue - yTop) / nScaling);
        _lineto ((VIEW_RIGHT                                - xLeft)/ nScaling,
                 (VIEW_BOTTOM - i * VIEW_HEIGHT / nMaxValue - yTop) / nScaling);

        if (i != 0)
        {
            sprintf (szBuffer, "%d\n", i);
            _grtext ((VIEW_LEFT - xLeft) / nScaling,
                (VIEW_BOTTOM - i * VIEW_HEIGHT / nMaxValue - yTop) / nScaling,
                 szBuffer);
        }
    }

    sprintf (szBuffer, "%d\n", nMaxValue);
    _grtext ((VIEW_LEFT - xLeft) / nScaling,
             (VIEW_TOP  - yTop)  / nScaling,
             szBuffer);

    _rectangle (_GBORDER,
                (VIEW_LEFT   - xLeft) / nScaling,
                (VIEW_TOP    - yTop)  / nScaling,
                (VIEW_RIGHT  - xLeft) / nScaling,
                (VIEW_BOTTOM - yTop)  / nScaling);

    _setcharsize (ts.height, ts.width);
}
Exemple #15
0
void drawTree(int leftBranch, int midBranch, int rightBranch)
{   // draws a tree on the screen
    _clearscreen(_GCLEARSCREEN);
    _setcolor(15);
    _setlinestyle(0xAAAA);
    _moveto(vc.numxpixels/2, vc.numypixels);
    _lineto(vc.numxpixels/2, vc.numypixels*3/4);
    _lineto(vc.numxpixels/6, vc.numypixels/3);
    _moveto(vc.numxpixels/2, vc.numypixels*3/4);
    _lineto(vc.numxpixels/2, vc.numypixels/4);
    _moveto(vc.numxpixels/2, vc.numypixels*3/4);
    _lineto(vc.numxpixels*5/6, vc.numypixels/3);
    if (leftBranch)
    {   _moveto(vc.numxpixels/6, vc.numypixels/3);
        _lineto(vc.numxpixels/18, 0);
        _moveto(vc.numxpixels/6, vc.numypixels/3);
        _lineto(vc.numxpixels*3/18, 0);
        _moveto(vc.numxpixels/6, vc.numypixels/3);
        _lineto(vc.numxpixels*5/18, 0);
    };  // if
    if (midBranch)
    {   _moveto(vc.numxpixels/2, vc.numypixels/4);
        _lineto(vc.numxpixels*7/18, 0);
        _moveto(vc.numxpixels/2, vc.numypixels/4);
        _lineto(vc.numxpixels*9/18, 0);
        _moveto(vc.numxpixels/2, vc.numypixels/4);
        _lineto(vc.numxpixels*11/18, 0);
    };  // if
    if (rightBranch)
    {   _moveto(vc.numxpixels*5/6, vc.numypixels/3);
        _lineto(vc.numxpixels*13/18, 0);
        _moveto(vc.numxpixels*5/6, vc.numypixels/3);
        _lineto(vc.numxpixels*15/18, 0);
        _moveto(vc.numxpixels*5/6, vc.numypixels/3);
        _lineto(vc.numxpixels*17/18, 0);
    };  // if
};  // drawTree
/* Stahl Nummer "tool" zeichen */
void Zeichne_Stahl(short xp,short yp,char tool,short color)
{
   _setcolor(color);
   switch(tool)
   {
      case 1:/* rechter Seitenstahl */
	  {
	    _moveto(xp,yp);
	    _lineto(xp+0,yp+12);
	    _lineto(xp+24,yp+18);
	    _lineto(xp+24,yp+8);
	    _lineto(xp,yp);

	    _moveto(xp+8,yp+14);
	    _lineto(xp+8,yp+50);	   /* 3 3 -> x4 y2 */
	    _moveto(xp+24,yp+10);
	    _lineto(xp+40,yp+12);
	    _lineto(xp+40,yp+50);
	  }
	  break;
      case 2:/* linker Seitenstahl */
	  {
	    _moveto(xp+56,yp);
	    _lineto(xp+32,yp+8);
	    _lineto(xp+32,yp+20);
	    _lineto(xp+56,yp+12);
	    _lineto(xp+56,yp);

	    _moveto(xp+48,yp+14);
	    _lineto(xp+48,yp+50);
	    _moveto(xp+32,yp+10);
	    _lineto(xp+16,yp+14);
	    _lineto(xp+16,yp+50);
	  }
	  break;
      case 3:/* neutraler Drehstahl */
	  {
	    _moveto(xp+28,yp);
	    _lineto(xp+16,yp+11);
	    _lineto(xp+28,yp+22);
	    _lineto(xp+40,yp+11);
	    _lineto(xp+28,yp);

	    _moveto(xp+16,yp+13);
	    _lineto(xp+9,yp+16);
	    _lineto(xp+9,yp+50);
	    _moveto(xp+40,yp+13);
	    _lineto(xp+50,yp+16);
	    _lineto(xp+50,yp+50);
	  }
	  break;
      case 4:/* Gewindestahl aussen rechts */
	  {
	    _moveto(xp+8,yp);
	    _lineto(xp+16,yp+6);
	    _lineto(xp+24,yp+6);
	    _lineto(xp+32,yp+8);
	    _lineto(xp+48,yp+8);
	    _lineto(xp+48,yp+50);

	    _moveto(xp+8,yp);
	    _lineto(xp-0,yp+7);
	    _lineto(xp-7,yp+7);
	    _lineto(xp-7,yp+50);
	  }
	  break;
      case 5:/* Stecher fuer Seegereinstiche */
	  {
	    _moveto(xp,yp+50);
	    _lineto(xp,yp-20);
	    _lineto(xp+8,yp-20);
	    _lineto(xp+8,yp-16);
	    _lineto(xp+12,yp-14);
	    _lineto(xp+12,yp-10);
	    _lineto(xp+40,yp-4);
	    _lineto(xp+40,yp+50);
	  }
	  break;
      case 6:/* Abstechklinge HSS */
	  {
	    _moveto(xp,yp+50);
	    _lineto(xp,yp);
	    _lineto(xp+13,yp);
	    _lineto(xp+13,yp+50);
	    _moveto(xp,yp+17);
	    _lineto(xp+13,yp+17);
	  }
	  break;
      case 7:/* Gewindestahl innen rechts */
	  {
	    _moveto(xp-80,yp+20);
	    _lineto(xp-71,yp+14);
	    _lineto(xp-64,yp+14);
	    _lineto(xp-56,yp+10);
	    _lineto(xp+80,yp+10);

	    _moveto(xp-80,yp+20);
	    _lineto(xp-99,yp+14);
	    _lineto(xp-100,yp+14);
	    _lineto(xp-100,yp+0);
	    _lineto(xp-92,yp-4);
	    _lineto(xp-92,yp-6);
	    _lineto(xp+80,yp-6);
	  }
	  break;
      case 8:/* Innendrehstahl */
	  {
	    _moveto(xp-80,yp+20);
	    _lineto(xp-80,yp+8);
	    _lineto(xp-56,yp);	 /*y+1*/
	    _lineto(xp-56,yp+14);
	    _lineto(xp-80,yp+20);

	    _moveto(xp-56,yp+10);
	    _lineto(xp+40,yp+10);
	    _moveto(xp-72,yp+6);
	    _lineto(xp-72,yp-6);
	    _lineto(xp+40,yp-6);
	  }
   }
}