// draw a box directly to display memory int _near Drawbox_Cmd( LPTSTR pszCmdLine ) { register TCHAR *pszArg, *pszLine; int nTop, nLeft, nBottom, nRight, nStyle, nAttribute = -1, nFill = -1, n, nFlags = 0, nShade; if (( pszCmdLine == NULL ) || ( *pszCmdLine == _TEXT('\0') )) return ( Usage( DRAWBOX_USAGE )); // get the arguments & colors if ( sscanf( pszCmdLine, _TEXT("%d%d%d%d%d%n"), &nTop, &nLeft, &nBottom, &nRight, &nStyle, &n ) == 6 ) { pszLine = pszCmdLine + n; nAttribute = GetColors( pszLine, 0 ); // check for a FILL color if (( *pszLine ) && ( _strnicmp( first_arg( pszLine ), BOX_FILL, 3 ) == 0 ) && (( pszArg = first_arg( next_arg( pszLine, 1 ))) != NULL )) { if ( _strnicmp( pszArg, BRIGHT, 3 ) == 0 ) { // set intensity bit nFill = 0x80; if (( pszArg = first_arg( next_arg( pszLine, 1 ))) == NULL ) return ( Usage( DRAWBOX_USAGE )); } else nFill = 0; if (( nShade = color_shade( pszArg )) <= 15 ) { nFill |= ( nShade << 4 ); next_arg( pszLine, 1 ); } } // check for a SHADOW or ZOOM while ( *pszLine ) { if ( _strnicmp( pszLine, BOX_SHADOW, 3 ) == 0 ) nFlags |= BOX_SHADOWED; else if ( _strnicmp( pszLine, BOX_ZOOM, 3 ) == 0 ) nFlags |= BOX_ZOOMED; next_arg( pszLine, 1 ); } } if (( nAttribute == -1 ) || ( verify_row_col( nTop, nLeft )) || ( verify_row_col( nBottom, nRight ))) return ( Usage( DRAWBOX_USAGE )); if ( nLeft == 999 ) { if (( nLeft = (( GetScrCols() - nRight ) / 2 )) < 0 ) nLeft = 0; nRight += nLeft; } if ( nTop == 999 ) { if (( nTop = (( GetScrRows() - nBottom ) / 2 )) < 0 ) nTop = 0; nBottom += nTop; } _box( nTop, nLeft, nBottom, nRight, nStyle, nAttribute, nFill, nFlags, 1 ); return 0; }
// draw a horizontal or vertical line directly to the display static int _fastcall __drawline( LPTSTR pszCmdLine, int fVertical ) { register int nAttribute = -1; int nRow, nColumn, nLength, nStyle, n; // get the arguments & colors if (( pszCmdLine == NULL ) || ( *pszCmdLine == _TEXT('\0') )) return ( Usage( (( fVertical ) ? DRAWVLINE_USAGE : DRAWHLINE_USAGE ))); if ( sscanf( pszCmdLine, _TEXT("%d%d%d%d%n"), &nRow, &nColumn, &nLength, &nStyle, &n ) == 5 ) nAttribute = GetColors( pszCmdLine+n, 0 ); // if row or column == 999, center the line if ( nColumn == 999 ) { nColumn = ( GetScrCols() - (( fVertical ) ? 0 : nLength )) / 2; if ( nColumn < 0 ) nColumn = 0; } if ( nRow == 999 ) { nRow = ( GetScrRows() - (( fVertical ) ? nLength : 0 )) / 2; if ( nRow < 0 ) nRow = 0; } return ((( nAttribute == -1 ) || ( verify_row_col( nRow, nColumn )) || ( _line( nRow, nColumn, nLength, nStyle, fVertical, nAttribute, 1 ) != 0 )) ? Usage( (( fVertical ) ? DRAWVLINE_USAGE : DRAWHLINE_USAGE ) ) : 0 ); }
// draw a box directly to display memory int drawbox_cmd(int argc, char **argv) { char *arg, *pszLine; int top, left, bottom, right, style, attribute = -1, fill = -1; int box_flags = 0; // get the arguments & colors if ((argc >= 7) && (sscanf(argv[1],"%d%d%d%d%d",&top,&left,&bottom,&right,&style) == 5)) { pszLine = argv[6]; attribute = GetColors(pszLine,0); // check for a FILL color if ((*pszLine) && (_strnicmp(first_arg(pszLine),BOX_FILL,3) == 0) && ((arg = first_arg(next_arg(pszLine,1))) != NULL)) { if (_strnicmp(arg,BRIGHT,3) == 0) { // set intensity bit fill = 0x80; if ((arg = first_arg(next_arg(pszLine,1))) == NULL) return (usage(DRAWBOX_USAGE)); } else fill = 0; if ((argc = color_shade(arg)) <= 15) { fill |= (argc << 4); (void)next_arg(pszLine,1); } } // check for a SHADOW or ZOOM while (*pszLine) { if (_strnicmp(pszLine,BOX_SHADOW,3) == 0) box_flags |= BOX_SHADOWED; else if (_strnicmp(pszLine,BOX_ZOOM,3) == 0) box_flags |= BOX_ZOOMED; (void)next_arg(pszLine,1); } } if ((attribute == -1) || (verify_row_col(top,left)) || (verify_row_col(bottom,right))) return (usage(DRAWBOX_USAGE)); _box(top,left,bottom,right,style,attribute,fill,box_flags,1); return 0; }
// draw a horizontal or vertical line directly to the display int drawline_cmd( int argc, char **argv ) { int attribute = -1; int row, col, len, width; // get the arguments & colors if (( argc >= 6 ) && ( sscanf( argv[1], "%d%d%d%d", &row, &col, &len, &width ) == 4 )) attribute = GetColors( argv[5], 0 ); return ((( attribute == -1 ) || ( verify_row_col( row, col )) || ( _line( row, col, len, width,(_ctoupper( argv[0][4] ) == 'V' ), attribute, 1 ) != 0 )) ? usage( DRAWLINE_USAGE ) : 0 ); }