Category : Files from Magazines
Archive   : D-FLAT.ZIP
Filename : FILEOPEN.C

 
Output of file : FILEOPEN.C contained in archive : D-FLAT.ZIP
/* ----------- fileopen.c ------------- */

#include
#ifdef MSC
#include
#else
#include
#endif
#include
#include
#include "dflat.h"

static int DlgFileOpen(char *, char *, DBOX *);
static int DlgFnOpen(WINDOW, MESSAGE, PARAM, PARAM);
static void InitDlgBox(WINDOW);
static void StripPath(char *);
static int IncompleteFilename(char *);

static char OrigSpec[80];
static char FileSpec[80];
char FileName[80];

static int Saving;
extern DBOX FileOpen;
extern DBOX SaveAs;

/*
* Dialog Box to select a file to open
*/
int DlgOpenFile(char *Fpath, char *Fname)
{
return DlgFileOpen(Fpath, Fname, &FileOpen);
}

/*
* Dialog Box to select a file to save as
*/
int DlgSaveAs(char *Fname)
{
return DlgFileOpen(NULL, Fname, &SaveAs);
}

/* --------- generic file open ---------- */
static int DlgFileOpen(char *Fpath, char *Fname, DBOX *db)
{
int rtn;
char savedir[80];

getcwd(savedir, sizeof savedir);
if (Fpath != NULL) {

strncpy(FileSpec, Fpath, sizeof(FileSpec)-1);
Saving = FALSE;
}
else {
*FileSpec = '\0';
Saving = TRUE;
}
strcpy(FileName, FileSpec);
strcpy(OrigSpec, FileSpec);

if ((rtn = DialogBox(db, DlgFnOpen)) != FALSE)
strcpy(Fname, FileName);
else
*Fname = '\0';

setdisk(toupper(*savedir) - 'A');
chdir(savedir);

return rtn;
}

/*
* Process dialog box messages
*/
static int DlgFnOpen(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
{
switch (msg) {
case INITIATE_DIALOG:
InitDlgBox(wnd);
break;
case COMMAND:
switch ((int) p1) {
case ID_FILENAME:
if (p2 != ENTERFOCUS) {
/* allow user to modify the file spec */
GetItemText(wnd, ID_FILENAME,
FileName, 65);
if (IncompleteFilename(FileName) || Saving) {
strcpy(OrigSpec, FileName);
StripPath(OrigSpec);
}
if (p2 != LEAVEFOCUS)
SendMessage(wnd, COMMAND, ID_OK, 0);
}
return TRUE;
case ID_OK:
GetItemText(wnd, ID_FILENAME,
FileName, 65);
strcpy(FileSpec, FileName);
if (IncompleteFilename(FileName)) {
/* no file name yet */
InitDlgBox(wnd);
PutItemText(wnd, ID_FILENAME, FileSpec);
strcpy(OrigSpec, FileSpec);
return TRUE;
}
else {
GetItemText(wnd, ID_PATH, FileName, 65);
strcat(FileName, FileSpec);
}
break;
case ID_FILES:
switch ((int) p2) {
case LB_SELECTION:
/* selected a different filename */
GetDlgListText(wnd, FileName,
ID_FILES);
PutItemText(wnd, ID_FILENAME,
FileName);
break;
case LB_CHOOSE:
/* chose a file name */
GetDlgListText(wnd, FileName,
ID_FILES);
SendMessage(wnd, COMMAND, ID_OK, 0);
break;
default:
break;
}
return TRUE;
case ID_DRIVE:
switch ((int) p2) {
case ENTERFOCUS:
if (Saving)
*FileSpec = '\0';
break;
case LEAVEFOCUS:
if (Saving)
strcpy(FileSpec, FileName);
break;
case LB_SELECTION: {
char dd[25];
/* selected different drive/dir */
GetDlgListText(wnd, dd,
ID_DRIVE);
if (*(dd+2) == ':')
*(dd+3) = '\0';
else
*(dd+strlen(dd)-1) = '\0';
strcpy(FileName, dd+1);
if (*(dd+2) != ':' && *OrigSpec != '\\')
strcat(FileName, "\\");
strcat(FileName, OrigSpec);
if (*(FileName+1) != ':' && *FileName != '.') {
GetItemText(wnd, ID_PATH, FileSpec, 65);
strcat(FileSpec, FileName);
}
else
strcpy(FileSpec, FileName);
break;
}
case LB_CHOOSE:
/* chose drive/dir */
InitDlgBox(wnd);
break;
default:
break;
}
PutItemText(wnd, ID_FILENAME, FileSpec);
return TRUE;


default:
break;
}
default:
break;
}
return DefaultWndProc(wnd, msg, p1, p2);
}

/*
* Initialize the dialog box
*/
static void InitDlgBox(WINDOW wnd)
{
if (*FileSpec)
PutItemText(wnd, ID_FILENAME, FileSpec);
if (DlgDirList(wnd, FileSpec, ID_FILES, ID_PATH, 0)) {
StripPath(FileSpec);
DlgDirList(wnd, "*.*", ID_DRIVE, 0, 0xc010);
}
}

/*
* Strip the drive and path information from a file spec
*/
static void StripPath(char *filespec)
{
char *cp, *cp1;

cp = strchr(filespec, ':');
if (cp != NULL)
cp++;
else
cp = filespec;
while (TRUE) {
cp1 = strchr(cp, '\\');
if (cp1 == NULL)
break;
cp = cp1+1;
}
strcpy(filespec, cp);
}


static int IncompleteFilename(char *s)
{
int lc = strlen(s)-1;
if (strchr(s, '?') || strchr(s, '*') || !*s)
return TRUE;
if (*(s+lc) == ':' || *(s+lc) == '\\')
return TRUE;
return FALSE;
}




  3 Responses to “Category : Files from Magazines
Archive   : D-FLAT.ZIP
Filename : FILEOPEN.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/