home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Micro R&D 1
/
MicroRD-CD-ROM-Vol1-1994.iso
/
os30
/
cli
/
wbinfo10.lha
/
wbinfo
/
wbinfo.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-06-19
|
3KB
|
167 lines
/*
* wbinfo.c
*
* Author: Georg Hessmann (hessmann@informatik.uni-hamburg.de)
*
*
* Program for 3.x or higher!
*
* Open the workbnch information requester for a given file.
*
* Need SAS/C to compile. Other compilers need small changes.
*
*
* Copyright: source is public domain, no copyright
*
* Version history:
*
* 1.0 20.Jul.93 First release.
*
*
*/
#define VERSION "1.0"
static const char version[] = "\0$VER: wbinfo " VERSION " (20.06.93)";
/*
* Amiga-Includes
*/
#include <exec/types.h>
#include <dos/dos.h>
#include <dos/dosasl.h>
#include <workbench/workbench.h>
#include <clib/dos_protos.h>
#include <clib/exec_protos.h>
#include <clib/wb_protos.h>
#include <clib/intuition_protos.h>
#include <pragmas/dos_pragmas.h>
#include <pragmas/exec_pragmas.h>
#include <pragmas/wb_pragmas.h>
#include <pragmas/intuition_pragmas.h>
/*
* Define SAS/C builtin functions
*/
typedef unsigned int size_t;
#define strlen __builtin_strlen
extern int strlen(char *);
extern void *__builtin_memcpy(void *, const void *, size_t);
#define memcpy(a,b,c) __builtin_memcpy(a,b,c)
extern char *strcpy(char *, const char *);
extern char *__builtin_strcpy(char *, const char *);
#define strcpy(a,b) __builtin_strcpy(a,b)
/*
* Template for ReadArgs()
*/
#define TEMPLATE "NAME/A,PUBSCREEN/K"
/*
* Main function. Must be the first in the module
*/
long __saveds main(void)
{
long rc = RETURN_OK;
struct Library * DOSBase;
struct Library * WorkbenchBase;
struct Library * IntuitionBase;
long options[2];
struct RDArgs * args;
char PubName[MAXPUBSCREENNAME+1];
DOSBase = OpenLibrary("dos.library", 36); // need at least 36 for PutStr()
if (DOSBase && DOSBase->lib_Version < 39) {
PutStr("Need system version 39.x or higher!\n");
CloseLibrary(DOSBase);
return RETURN_FAIL;
}
WorkbenchBase = OpenLibrary("workbench.library", 39);
IntuitionBase = OpenLibrary("intuition.library", 39);
if (!(WorkbenchBase && IntuitionBase)) return RETURN_FAIL;
options[0] = options[1] = 0L;
args = ReadArgs(TEMPLATE, options, NULL);
if (args) {
char * file = (char *)options[0];
char * pubname = (char *)options[1];
if (pubname) {
if (strlen(pubname) >= sizeof(PubName)) { // test max length
PrintFault(ERROR_BUFFER_OVERFLOW, pubname);
rc = RETURN_FAIL;
}
else {
strcpy(PubName, pubname);
}
}
else {
GetDefaultPubScreen(PubName);
}
if (rc == RETURN_OK) {
struct Screen * screen = LockPubScreen(PubName);
if (screen) {
BPTR lock = Lock(file, ACCESS_READ);
if (lock) {
BPTR par;
par = ParentDir(lock);
if (!par) par = DupLock(lock); // for Devices
if (!WBInfo(par, file, screen)) rc = RETURN_WARN;
if (par) UnLock(par);
UnLock(lock);
}
else {
PrintFault(IoErr(), file);
rc = RETURN_ERROR;
}
UnlockPubScreen(NULL, screen);
}
else { // error message for 'pubscreen not found' ... ??
PrintFault(ERROR_OBJECT_NOT_FOUND, pubname);
rc = RETURN_FAIL;
}
}
FreeArgs(args);
}
else {
PrintFault(IoErr(), NULL);
rc = RETURN_ERROR;
}
CloseLibrary(WorkbenchBase);
CloseLibrary(IntuitionBase);
CloseLibrary(DOSBase);
return rc;
}