🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.os.msdos.programmer
Article #479

MY problem? ...or Borland's? (also on comp.lang.c)

#479
From: Robert C Allender
Date: Sat, 25 Jul 1992 16:38
127 lines
4789 bytes
I'm VERY new to C, but I can usually hold my own by R(ing)TFM.  This is 
different.  I've checked through Borland's FAX document catalog (I use 
Borland's C++ 3.0, but I use the standard C mode), ALL the manuals, a few 
3rd party books on Borland C ... nothing.  Here's the problem:
I initialize a char * in main() and pass it to a function that gets a string, 
passing the address of the string back to main().  If I try to print the 
string back at main(), it works.  I pass the char * to the next function, and
I can print the string at the beginning of that function, but by the end of 
it, the string is garbage.  If I then pass the value to main() and send it to
yet aother function, the array is empty.  I can put checks in anywhere and
find the strlen() to be correct at ANY of the points where it won't print, 
but the values get corrupt and then dissappear.  What am I doing wrong?

Here's the boiled-down code...

#include <everything that's needed>
#define LENGTH 10

main_bkgrd();
main_title();
main_entry();
get_info();
char * scrollbox(char,int,int);
next(char *);
prev(char *);
make_box(int,int);
char * get_dir(char,int,int);
char get_drive();
clear_half(char *);
list_dir(char *);

main() {
  char drive, *c;
  char dummy;

  clrscr();
  main_bkgrd();
  main_title();
  main_entry();
  make_box(61,10);

  do {
    do {
      drive=get_drive();
    } while (drive == NULL);
    c = scrollbox(drive,61,10);  <---- This gets a directory, etc. 
  } while(!c);
  
  clear_half(c);                 <-- can print the array here BEFORE the end
				     of the function, else it's garbage.
  list_dir(c);                   <-- by this point the array values are GONE.

  scanf("%c",&dummy);            <-- Just holds the screen so I can see 
  return (0);                        where it messed up and what it's doing.
}

list_dir(char *dir)  {           <-- "c" from main()
  char seekdir[100];             <-- define new array so that "\"'s can be 
				     replaced with reqired "\\"'s  in 
				     _dos_findfirst().
  struct find_t z;                                
  int count,end;                 <-- generic counters
  int counta, countb;

  textcolor(3);
  for (count=1; count<strlen(dir); count++)    <-- try printing the OLD array
    cprintf("%c",dir[count]);                       for kicks (doesn't work)
  
  textcolor(0);
  textbackground(1);
  for(counta=1, countb=1; countb<strlen(dir); counta++, countb++) {
     seekdir[counta] = dir[countb];
     if (dir[countb] == '\\') {          <-- all this just sets up the NEW
	counta++;                            array for processing by 
	seekdir[counta] = '\\';              _dos_findfirst().
     }
  }
  end = _dos_findfirst(seekdir,_A_NORMAL,&z);
  while (!end)  {
     cprintf(" %s\n",z.name);
     end = _dos_findnext(&z);
  }
  return(0);
}


clear_half(char *p) {
  int row, counter, max;
  textbackground(0);
  textcolor(7);
  max=strlen(p);

  textbackground(1);
  textcolor(7);
  gotoxy(4,12);
  cprintf("Directory of: ");
  for (counter=1; counter<max; counter++)     <-- Print the array.  It WORKS
    cprintf("%c",p[counter]);                     at this point!

  textbackground(0);
  for(row=14; row<24; row++)  {
    gotoxy(5,row);
    cprintf("                                 <-- Just blanks out a line 
  }                                               (didn't all fit on the page)

  textbackground(1);
  textcolor(7);
  for(row=13; row<23; row++)  {
    gotoxy(4,row);
    cprintf("                                                                          ");
  }
  return(0);
}

If anyone knows how to fix this, I'd really appreciate the help.  If you can
E-Mail me (rca@csd4.csd.uwm.edu), I'll post a summary of all the reasonable
solutions.

Thanks

--------------------------------------------------------------------------
| Robert C. Allender    |  "Exactly!" said Deep Thought. "So once you do | 
| rca@csd4.csd.uwm.edu  |  know what the question actually is, you'll    | 
| rca@bfs.uwm.edu       |  know what the answer means."                  | 
|                       |        -The Hitchhiker's Guide to the Galaxy   | 
--------------------------------------------------------------------------
-- 
Technical Details
Message-ID: <1992Jul25.163852.19770@uwm.edu>
Path: arc1-ca.pugleaf.net!sparky!uunet!caen!uwm.edu!csd4.csd.uwm.edu!rca

Show Full Headers
Complete Article Headers
Newsgroups: comp.os.msdos.programmer
Path: arc1-ca.pugleaf.net!sparky!uunet!caen!uwm.edu!csd4.csd.uwm.edu!rca
From: rca@csd4.csd.uwm.edu (Robert C Allender)
Subject: MY problem? ...or Borland's? (also on comp.lang.c)
Message-ID: <1992Jul25.163852.19770@uwm.edu>
Originator: rca@csd4.csd.uwm.edu
Sender: news@uwm.edu (USENET News System)
Organization: Computing Services Division, University of Wisconsin - Milwaukee
Date: Sat, 25 Jul 1992 16:38:52 GMT
Lines: 131