home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 6
/
AACD06.ISO
/
AACD
/
Programming
/
DOpus4-GPL
/
Program
/
main6.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-01-27
|
10KB
|
372 lines
/*
Directory Opus 4
Original GPL release version 4.12
Copyright 1993-2000 Jonathan Potter
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
All users of Directory Opus 4 (including versions distributed
under the GPL) are entitled to upgrade to the latest version of
Directory Opus version 5 at a reduced price. Please see
http://www.gpsoft.com.au for more information.
The release of Directory Opus 4 under the GPL in NO WAY affects
the existing commercial status of Directory Opus 5.
*/
#include "DOpus.h"
void get_printdir_data(pddata)
struct PrintDirData *pddata;
{
char buf[256];
int win;
if (pddata->win<0 || pddata->win>1) win=data_active_window;
else win=pddata->win;
pddata->entry=dopus_curwin[win]->firstentry;
pddata->titlebuf[0]=0;
if ((dopus_curwin[win]->filesel+
dopus_curwin[win]->dirsel)>0) pddata->onlysel=1;
else pddata->onlysel=0;
switch (ENTRYTYPE(pddata->entry->type)) {
case ENTRY_DEVICE:
strcpy(pddata->titlebuf,globstring[STR_DEVICE_LIST]);
break;
case ENTRY_CUSTOM:
switch (pddata->entry->subtype) {
case CUSTOMENTRY_DIRTREE:
strcpy(pddata->titlebuf,globstring[STR_DIR_TREE]);
strcat(pddata->titlebuf,"\n");
goto printdiskname;
default:
strcpy(pddata->titlebuf,globstring[STR_CUSTOM_LIST]);
break;
}
break;
default:
printdiskname:
strcat(pddata->titlebuf,globstring[STR_DIRECTORY]);
if (expand_path(str_pathbuffer[win],buf))
strcat(pddata->titlebuf,buf);
else strcat(pddata->titlebuf,str_pathbuffer[win]);
break;
}
strcat(pddata->titlebuf,"\n");
}
void startnotify(win)
int win;
{
if (!dos_notify_req[win]) return;
main_proc->pr_WindowPtr=(APTR)-1;
endnotify(win);
if (config->dynamicflags&UPDATE_NOTIFY && str_pathbuffer[win][0]) {
if (dopus_curwin[win]->disktot>(2*(1<<20))) {
strcpy(dos_notify_names[win],str_pathbuffer[win]);
dos_notify_req[win]->nr_UserData=win;
dos_notify_req[win]->nr_Flags=NRF_SEND_MESSAGE;
dos_notify_req[win]->nr_stuff.nr_Msg.nr_Port=count_port;
if (!(StartNotify(dos_notify_req[win])))
dos_notify_names[win][0]=0;
}
}
if (config->errorflags&ERROR_ENABLE_DOS) main_proc->pr_WindowPtr=(APTR)Window;
}
void endnotify(win)
int win;
{
if (dos_notify_req[win] && dos_notify_names[win][0]) {
EndNotify(dos_notify_req[win]);
dos_notify_names[win][0]=0;
}
}
void startnotifies()
{
int a;
for (a=0;a<2;a++) {
if (LStrCmpI(dos_notify_names[a],str_pathbuffer[a]))
startnotify(a);
}
}
void endnotifies()
{
int a;
for (a=0;a<2;a++) endnotify(a);
}
dormbgadget(x1,y1,gad1,gad2)
int x1,y1;
struct newdopusfunction *gad1,*gad2;
{
struct RMBGadget rmbgad;
int a;
if (config->generalscreenflags&SCR_GENERAL_INDICATERMB)
do3dbox(main_rp,x1+2,y1+1,scrdata_gadget_width-4,scrdata_gadget_height-2);
rmbgad.flags=RGF_ALTTEXT; rmbgad.id=0;
if (gadget_unsel_border) {
rmbgad.flags|=RGF_ALTBORD;
rmbgad.high_bord[0]=gadget_unsel_border;
rmbgad.high_bord[1]=gadget_sel_border;
}
for (a=0;a<2;a++) {
rmbgad.txt[a].x=2;
rmbgad.txt[a].y=1;
rmbgad.txt[a].w=scrdata_gadget_width-4;
rmbgad.txt[a].h=scrdata_gadget_height-2;
}
rmbgad.x=x1;
rmbgad.y=y1;
rmbgad.w=scrdata_gadget_width;
rmbgad.h=scrdata_gadget_height;
rmbgad.txt[0].fg=screen_pens[gad1->fpen].pen;
rmbgad.txt[0].bg=screen_pens[gad1->bpen].pen;
rmbgad.txt[0].text=gad1->name;
rmbgad.txt[1].fg=screen_pens[gad2->fpen].pen;
rmbgad.txt[1].bg=screen_pens[gad2->bpen].pen;
rmbgad.txt[1].text=gad2->name;
if (status_iconified<1) SetFont(main_rp,scr_font[FONT_GADGETS]);
a=DoRMBGadget(&rmbgad,Window);
if (status_iconified<1) SetFont(main_rp,scr_font[FONT_GENERAL]);
if (config->generalscreenflags&SCR_GENERAL_INDICATERMB)
drawgadgetcorner(main_rp,x1+2,y1+1);
return(a);
}
gadgetfrompos(x,y)
int x,y;
{
int xg,yg,gad;
if (y<scrdata_gadget_ypos-1 || x<scrdata_gadget_xpos) return(-1);
x-=scrdata_gadget_xpos; y-=(scrdata_gadget_ypos-1);
xg=x/scrdata_gadget_width; yg=y/scrdata_gadget_height;
gad=(yg*7)+xg;
if (gad<0 || gad>=(scr_gadget_rows*7)) return(-1);
xg=(gad%7)*scrdata_gadget_width; yg=(gad/7)*scrdata_gadget_height;
if (x>=xg && x<xg+scrdata_gadget_width && y>=yg && y<yg+scrdata_gadget_height) return(gad);
return(-1);
}
isvalidgad(gad)
struct newdopusfunction *gad;
{
return((gad->name && gad->name[0] && gad->function && gad->function[0]));
}
getpal()
{
int p;
struct Screen *screen;
ULONG modeid=LORES_KEY;
struct DisplayInfo displayinfo;
p=(GfxBase->DisplayFlags&PAL)?1:0;
if (system_version2>=OSVER_37) {
if (screen=LockPubScreen(NULL)) {
if ((modeid=GetVPModeID(&(screen->ViewPort)))!=INVALID_ID) {
if (!((modeid&MONITOR_ID_MASK)==NTSC_MONITOR_ID ||
(modeid&MONITOR_ID_MASK)==PAL_MONITOR_ID))
modeid=LORES_KEY;
}
UnlockPubScreen(NULL,screen);
}
if (GetDisplayInfoData(NULL,(UBYTE *)&displayinfo,sizeof(struct DisplayInfo),DTAG_DISP,modeid)) {
if (displayinfo.PropertyFlags&DIPF_IS_PAL) p=1;
else p=0;
}
}
return(p);
}
void quickfixmenus()
{
int a;
ULONG class;
USHORT code;
if (Window->MenuStrip) {
Forbid();
a=0;
while (getintuimsg()) {
class=IMsg->Class; code=IMsg->Code;
if (class==MOUSEBUTTONS && code==MENUUP) {
a=1;
break;
}
ReplyMsg((struct Message *)IMsg);
}
if (!a) {
Window->Flags&=~RMBTRAP;
sendmouseevent(IECLASS_RAWMOUSE,IECODE_RBUTTON|IECODE_UP_PREFIX,0,0);
sendmouseevent(IECLASS_RAWMOUSE,IECODE_RBUTTON,0,0);
}
Permit();
}
}
void sendmouseevent(class,code,x,y)
UBYTE class;
UWORD code;
int x,y;
{
struct InputEvent inputev;
input_req->io_Command=IND_WRITEEVENT;
input_req->io_Flags=0;
input_req->io_Length=sizeof(struct InputEvent);
input_req->io_Data=(APTR)&inputev;
inputev.ie_NextEvent=NULL;
inputev.ie_Class=class;
inputev.ie_Code=code;
inputev.ie_Qualifier=0;
inputev.ie_X=x;
inputev.ie_Y=y;
DoIO((struct IORequest *)input_req);
}
char *getfiledescription(name,win)
char *name;
int win;
{
int a;
char buf[256];
struct dopusfiletype *type;
for (a=0;a<DISPLAY_LAST+1;a++) {
if (config->displaypos[win][a]==DISPLAY_FILETYPE) break;
}
if (a>DISPLAY_LAST || !name[0]) return(NULL);
StrCombine(buf,str_pathbuffer[win],name,256);
if (!(type=checkfiletype(buf,-1,0))) return(NULL);
if ((strcmp(type->type,"Default")==0) ||
(strcmp(type->type,globstring[STR_FTYPE_DEFAULT])==0))
return(globstring[STR_FTYPE_UNKNOWN]);
return(type->type);
}
void fixhlen(win)
int win;
{
int a;
if (dopus_curwin[win]->total>0 &&
(dopus_curwin[win]->firstentry->type==ENTRY_CUSTOM ||
dopus_curwin[win]->firstentry->type==ENTRY_DEVICE)) {
if (dopus_curwin[win]->firstentry->type==ENTRY_DEVICE)
dopus_curwin[win]->hlen=scrdata_dispwin_nchars[win];
}
else {
dopus_curwin[win]->hlen=0;
if (dopus_curwin[win]->total>0 || str_pathbuffer[win][0]) {
for (a=0;a<=DISPLAY_LAST;a++) {
if (config->displaypos[win][a]==DISPLAY_NAME)
dopus_curwin[win]->hlen+=config->displaylength[win][0];
else if (config->displaypos[win][a]==DISPLAY_SIZE)
dopus_curwin[win]->hlen+=8;
else if (config->displaypos[win][a]==DISPLAY_PROTECT)
dopus_curwin[win]->hlen+=9;
else if (config->displaypos[win][a]==DISPLAY_DATE) {
if (config->dateformat&DATE_12HOUR)
dopus_curwin[win]->hlen+=20;
else dopus_curwin[win]->hlen+=19;
}
else if (config->displaypos[win][a]==DISPLAY_COMMENT)
dopus_curwin[win]->hlen+=config->displaylength[win][1];
else if (config->displaypos[win][a]==DISPLAY_FILETYPE)
dopus_curwin[win]->hlen+=config->displaylength[win][2];
else if (AccountsBase) {
if (config->displaypos[win][a]==DISPLAY_OWNER)
dopus_curwin[win]->hlen+=config->displaylength[win][3];
else if (config->displaypos[win][a]==DISPLAY_GROUP)
dopus_curwin[win]->hlen+=config->displaylength[win][4];
else if (config->displaypos[win][a]==DISPLAY_NETPROT)
dopus_curwin[win]->hlen+=10;
}
}
}
if (dopus_curwin[win]->hlen<scrdata_dispwin_nchars[win])
dopus_curwin[win]->hlen=scrdata_dispwin_nchars[win];
if (dopus_curwin[win]->hoffset>=(dopus_curwin[win]->hlen-scrdata_dispwin_nchars[win]))
dopus_curwin[win]->hoffset=dopus_curwin[win]->hlen-scrdata_dispwin_nchars[win];
}
}
/* Get the name of the screen we are currently on */
char *get_our_pubscreen()
{
char *name;
if (Window) {
/* Under 2.0 we lock the pubscreen list, and scan it to find
the screen we're on */
if (system_version2) {
struct List *pubscreenlist;
struct PubScreenNode *node;
if (pubscreenlist=LockPubScreenList()) {
for (node=(struct PubScreenNode *)pubscreenlist->lh_Head;
node->psn_Node.ln_Succ;
node=(struct PubScreenNode *)node->psn_Node.ln_Succ) {
/* See if this node is our screen */
if (node->psn_Screen==Window->WScreen) {
/* Get name pointer */
name=node->psn_Node.ln_Name;
break;
}
}
UnlockPubScreenList();
}
}
/* Otherwise use default title */
if (!name) name=Window->WScreen->DefaultTitle;
}
/* If no window open, use port name */
else name=str_arexx_portname;
return(name);
}
/* Change name of arexx port */
void change_port_name(name)
char *name;
{
Forbid();
RemPort(arexx_port);
strncpy(str_arexx_portname,name,29);
str_arexx_portname[29]=0;
AddPort(arexx_port);
Permit();
}