Question

DOS - Character positioning and screen buffering.

Asked by: TheUaRT

When working with a 80 x 25 character layout I would like to be able to write a character to 80,25 without scrolling the rest of the contents on the screen.
If this is possible how can it be done.
If this is not possible, what are my options?

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2002-11-12 at 06:45:54ID20396284
Tags

dos

Topics

C Programming Language

,

Font Creator

Participating Experts
4
Points
75
Comments
13

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Double Buffering and Scrolled Windows
    I found some interesting code for double buffering in MFC. Unfortunately it does not work on scrolled windows. Can someone please help me impliment doubble buffering with scrolled windows? BTW: The code I am using for double buffering is the following: http://www.codepr...
  2. Positioning / content
    I have a client who wants her site to look like it is in a frame but I told her frames are no good. So she is willing to do it the other way (using positioning). Now I would assume I might have to use a table because it is a footer as well & CSS does not work well with ...
  3. Delete a character in a buffer
    I was wondering if there was a way to delete a character from a buffer at a certain position, making sure that it will correctly move the other characters into place. example) if the buffer BUF has "test" in it's buffer how would i delete the "e" and mak...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: CatalepsyPosted on 2002-11-12 at 07:10:03ID: 7438445

I believe there are plenty of options out there for this, what compiler IDE are you using?

 

by: TheUaRTPosted on 2002-11-12 at 07:14:20ID: 7438464

DJGPP for DOS

and

Visual Studio.NET
   But I am not interested in the CONSOLE API.
   Or it's lack of support for conio.h


I am not interested in hearing about how DOS is DEAD as a solution to this question.  I paid good money for my copy of dos and DJGPP is designed for it! :)

 

by: CatalepsyPosted on 2002-11-12 at 07:31:07ID: 7438565

Shoot, all I was going to say is I used to do that sort of stuff with Borland Turbo C/C++ and they had windows you could create and manage.  This allowed one to print anywhere on the screen and if they did it right, text would not scroll.  Later, I found out that Visual C++ offers the same thing on their console applications; which I've never used.  The other alternative, which really isn't too painful is to program all this in an SDI and manage the OnPaint() call yourself.  Using a TextOut() you can print the 25 lines yourself.  It really is fairly easy to do it that way.  I know because I have a much more complex program at home I am writing that takes advantage of this, however, instead of straight text on a black background I am tiling a bitmap across the background and drawing a few other bitmpas to the screen and printing text in various different colors.  Then I have to manage all keyboard input.  I don't know what DJGPP is.  Until recently, I've done a lot of programming in DOS.

 

by: obgPosted on 2002-11-12 at 09:22:50ID: 7439099

typedef struct {
   char ch;
   char attr;
} scr[25][80];

...
   scr *screen = 0xB8000000;

   (*screen)[24][79].ch = 'X';
   (*screen)[24][79].attr = 0x07;

 

by: TheUaRTPosted on 2002-11-12 at 10:47:42ID: 7439455

warning: initialization makes pointer from integer without a cast

or

'screen' is undeclared identifier.

what's screen?

 

by: ExceterPosted on 2002-11-12 at 11:06:23ID: 7439567

Try this, it's the way I always did it.

#include <stdio.h>
#include <conio.h>
#include <dos.h>

#define VIDEO 0x10
#define COLS  80
#define ROWS  25

void cls(void);
void locate( int col, int row );

int main(void)
{
     cls();
     printf("The cursor is off the screen(Press any key to return to dos.)");
     locate( 80,25);
     getch();

     return 0;
}

void cls(void)
{
    union REGS regs;
    regs.h.ah=0x06;
    regs.h.al=0x00;
    regs.h.bh=0x07;
    regs.h.ch=0x00;
    regs.h.cl=0x00;
    regs.h.dh=ROWS - 1;
    regs.h.dl=COLS - 1;
    int86(VIDEO,&regs, &regs);
    locate(0,0);
}

void locate(int col, int row)
{
    union REGS regs;
    regs.h.ah=0x02;
    regs.h.bh=0x00;
    regs.h.dh=row;
    regs.h.dl=col;
    int86(VIDEO,&regs,&regs);
}

 

by: obgPosted on 2002-11-13 at 00:40:56ID: 7441951

The interrupt way is much slower, but it does basically the same thing. An advantage is that it might work better if you run in a window...

It's true that I make a pointer of an integer without a cast, so let's declare screen like:

   scr *screen = (scr *)0xB8000000;

After that 'screen' is a pointer to the actual DOS text mode video memory. Setting (*screen)[24][79].ch to 'X' will simply put an X in the lower right corner of the 80x25 screen. Setting attr to 0x07 will give the X a gray color on black background.

 

by: TheUaRTPosted on 2002-11-13 at 03:25:21ID: 7442444

// temp.c

int main(void){
     typedef struct {
          char ch;
          char attr;
     } scr[25][80];

     //scr * screen = 0xB8000000;
     scr * screen = (scr *)0xB8000000;

     (*screen)[24][79].ch = 'X';
     (*screen)[24][79].attr = 0x07;

     return 0;
}

Exiting due to signal SIGSEGV
General Protection Fault at eip=000015ff
eax=b8000f9e ebx=000001c5 ecx=00000000 edx=0000033f esi=00000054 edi=0000d760
ebp=0008d740 esp=0008d730 program=F:\DJGPP\TEMP\TEMP.EXE
cs: sel=01a7  base=01c50000  limit=0009ffff
ds: sel=01af  base=01c50000  limit=0009ffff
es: sel=01af  base=01c50000  limit=0009ffff
fs: sel=017f  base=000070e0  limit=0000ffff
gs: sel=01bf  base=00000000  limit=0010ffff
ss: sel=01af  base=01c50000  limit=0009ffff
App stack: [0008d760..0000d760]  Exceptn stack: [0000d6c0..0000b780]

Call frame traceback EIPs:
  0x000015ff
  0x00002e68

 

by: obgPosted on 2002-11-13 at 04:01:18ID: 7442548

Ehh... Does your program run in protected mode? That could explain a few things. In that case I would try the "interrupt" way, but I suspect the entire interrupt support is not implemented...

Another solution might be to try and change the scope of ds to include video RAM at 0x000B8000 (up to 0x000B81FF or something like that). I have absolutely no idea how you would accomplish that, though. Do you have some kind of special environment where you run your program, or is everything compiled in?

 

by: obgPosted on 2002-11-13 at 04:05:21ID: 7442563

If you manage to change scope of ds to physical address 0 to 0x000B81FF, you'd have to change the initialization of screen to 0x000B8000. I'm very curious however you'll get this to work...

 

by: obgPosted on 2002-11-13 at 04:08:52ID: 7442577

Aaarrgghhh.... Before someone else points out that I'm a lousy matamatician, your upper limit needs to be 0x000B8FFF.

 

by: jmcgPosted on 2004-01-06 at 20:41:48ID: 10058965

Nothing has happened on this question in more than 13 months. It's time for cleanup!

My recommendation, which I will post in the Cleanup topic area, is to
split points between obg and Exceter.

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

jmcg
EE Cleanup Volunteer

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...