home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 3 / CD_Magazyn_EXEC_nr_3.iso / Internet / Strony_WWW / Opus4.x / DOpus414JRsrc.lha / DirectoryOpus4 / DOpus_Icon / main.c < prev    next >
C/C++ Source or Header  |  2000-01-29  |  7KB  |  246 lines

  1. /*
  2.  
  3. Directory Opus 4
  4. Original GPL release version 4.12
  5. Copyright 1993-2000 Jonathan Potter
  6.  
  7. This program is free software; you can redistribute it and/or
  8. modify it under the terms of the GNU General Public License
  9. as published by the Free Software Foundation; either version 2
  10. of the License, or (at your option) any later version.
  11.  
  12. This program is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with this program; if not, write to the Free Software
  19. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20.  
  21. All users of Directory Opus 4 (including versions distributed
  22. under the GPL) are entitled to upgrade to the latest version of
  23. Directory Opus version 5 at a reduced price. Please see
  24. http://www.gpsoft.com.au for more information.
  25.  
  26. The release of Directory Opus 4 under the GPL in NO WAY affects
  27. the existing commercial status of Directory Opus 5.
  28.  
  29. */
  30.  
  31. #include "iconinfo.h"
  32.  
  33. /* prototypes */
  34. void get_vis_info(struct VisInfo *vis,char *portname);
  35. void setup_strings(void);
  36. /* end of prototypes */
  37.  
  38. void main(argc,argv)
  39. int argc;
  40. char *argv[];
  41. {
  42.     struct VisInfo vis;
  43.     char *dummy_args[16],*port,stringname[80];
  44.     struct DOpusStartup *startup=NULL;
  45.     int a,arg;
  46.     struct StringData stringdata;
  47.  
  48.     if (argc==0) {
  49.         int arg;
  50.  
  51.         startup=(struct DOpusStartup *)argv;
  52.         for (arg=0;arg<startup->wbstartup.sm_NumArgs && arg<16;arg++) {
  53.             dummy_args[arg]=startup->wbstartup.sm_ArgList[arg].wa_Name;
  54.             ++argc;
  55.         }
  56.         for (;arg<16;arg++) dummy_args[arg]=NULL;
  57.         argv=dummy_args;
  58.     }
  59.  
  60.     DOpusBase=NULL;
  61.  
  62.     if (argc<2 ||
  63.         !(DOpusBase=(struct DOpusBase *)OpenLibrary("dopus.library",18)) ||
  64.         !(IconBase=OpenLibrary("icon.library",0))) {
  65.         if (DOpusBase) CloseLibrary((struct Library *)DOpusBase);
  66.         _exit(0);
  67.     }
  68.  
  69.     IntuitionBase=DOpusBase->IntuitionBase;
  70.     GfxBase=DOpusBase->GfxBase;
  71.     LayersBase=(struct Library *)DOpusBase->LayersBase;
  72.  
  73.     if (argc>2 && argv[1][0]=='&') {
  74.         arg=2;
  75.         port=&argv[1][1];
  76.     }
  77.     else {
  78.         arg=1;
  79.         port=NULL;
  80.     }
  81.     get_vis_info(&vis,port);
  82.  
  83.     stringdata.default_table=default_strings;
  84.     stringdata.string_count=STR_STRING_COUNT;
  85.     stringdata.string_table=NULL;
  86.     stringdata.string_buffer=NULL;
  87.     stringdata.min_version=STRING_VERSION;
  88.  
  89.     if (vis.vi_language)
  90.         lsprintf(stringname,"DOpus:Modules/S/DM_Icon_%s.STR",vis.vi_language);
  91.     else stringname[0]=0;
  92.  
  93.     if (ReadStringFile(&stringdata,stringname)) {
  94.         string_table=stringdata.string_table;
  95.  
  96.         setup_strings();
  97.  
  98.         a=doiconinfo(&vis,argv[arg]);
  99.         if (startup) startup->retcode=a;
  100.     }
  101.     FreeStringFile(&stringdata);
  102.  
  103.     CloseLibrary(IconBase);
  104.     CloseLibrary((struct Library *)DOpusBase);
  105.     _exit(0);
  106. }
  107.  
  108. void get_vis_info(vis,portname)
  109. struct VisInfo *vis;
  110. char *portname;
  111. {
  112.     vis->vi_fg=1; vis->vi_bg=0;
  113.     vis->vi_shine=2; vis->vi_shadow=1;
  114.     vis->vi_font=NULL;
  115.     vis->vi_screen=NULL;
  116.     vis->vi_stringcol[0]=1; vis->vi_stringcol[1]=0;
  117.     vis->vi_activestringcol[0]=1; vis->vi_activestringcol[1]=0;
  118.     vis->vi_flags=VISF_8POINTFONT|VISF_WINDOW;
  119.     vis->vi_language=NULL;
  120.  
  121.     if (dopus_message(DOPUSMSG_GETVIS,(APTR)vis,portname)) return;
  122.  
  123.     if (IntuitionBase->LibNode.lib_Version>35) {
  124.         struct DrawInfo *drinfo;
  125.         struct Screen *pub;
  126.  
  127.         if (pub=LockPubScreen(NULL)) {
  128.             drinfo=GetScreenDrawInfo(pub);
  129.             vis->vi_shine=drinfo->dri_Pens[SHINEPEN];
  130.             vis->vi_shadow=drinfo->dri_Pens[SHADOWPEN];
  131.             vis->vi_fg=drinfo->dri_Pens[TEXTPEN];
  132.             vis->vi_bg=drinfo->dri_Pens[BACKGROUNDPEN];
  133.             FreeScreenDrawInfo(pub,drinfo);
  134.             UnlockPubScreen(NULL,pub);
  135.         }
  136.     }
  137. }
  138.  
  139. dopus_message(cmd,data,portname)
  140. int cmd;
  141. APTR data;
  142. char *portname;
  143. {
  144.     struct MsgPort *port,*replyport;
  145.     struct DOpusMessage msg;
  146.  
  147.     Forbid();
  148.     if (portname && portname[0] &&
  149.         (port=FindPort(portname)) &&
  150.         (replyport=LCreatePort(NULL,0))) {
  151.         msg.msg.mn_Node.ln_Type=NT_MESSAGE;
  152.         msg.msg.mn_Node.ln_Name=NULL;
  153.         msg.msg.mn_ReplyPort=replyport;
  154.         msg.msg.mn_Length=(UWORD)sizeof(struct DOpusMessage);
  155.         msg.command=cmd;
  156.         msg.data=data;
  157.         PutMsg(port,(struct Message *)&msg);
  158.         Permit();
  159.         WaitPort(replyport);
  160.         GetMsg(replyport);
  161.         LDeletePort(replyport);
  162.         return(1);
  163.     }
  164.     Permit();
  165.     return(0);
  166. }
  167.  
  168. void fill_out_req(req,vis)
  169. struct RequesterBase *req;
  170. struct VisInfo *vis;
  171. {
  172.     req->rb_fg=vis->vi_fg;
  173.     req->rb_bg=vis->vi_bg;
  174.     req->rb_shine=vis->vi_shine;
  175.     req->rb_shadow=vis->vi_shadow;
  176.     req->rb_font=vis->vi_font;
  177.     req->rb_flags&=~RBF_WINDOWCENTER;
  178.     if (vis->vi_screen) {
  179.         if (vis->vi_flags&VISF_WINDOW) {
  180.             req->rb_screen=((struct Window *)vis->vi_screen)->WScreen;
  181.             req->rb_window=(struct Window *)vis->vi_screen;
  182.             req->rb_flags|=RBF_WINDOWCENTER;
  183.         }
  184.         else req->rb_screen=vis->vi_screen;
  185.     }
  186.     else req->rb_screen=NULL;
  187. }
  188.  
  189. struct Gadget *addreqgadgets(reqbase,gadgets)
  190. struct RequesterBase *reqbase;
  191. struct TagItem **gadgets;
  192. {
  193.     int gad;
  194.     struct Gadget *gadget=NULL,*newgadget,*firstgadget;
  195.  
  196.     for (gad=0;;gad++) {
  197.         if (!gadgets[gad]) break;
  198.         if (!(newgadget=(struct Gadget *)
  199.             AddRequesterObject(reqbase,gadgets[gad]))) return(NULL);
  200.         if (gadget) gadget->NextGadget=newgadget;
  201.         else firstgadget=newgadget;
  202.         gadget=newgadget;
  203.     }
  204.     AddGadgets(reqbase->rb_window,firstgadget,NULL,gad,reqbase->rb_shine,reqbase->rb_shadow,1);
  205.     return(firstgadget);
  206. }
  207.  
  208. void fix_listview(reqbase,list)
  209. struct RequesterBase *reqbase;
  210. struct DOpusListView *list;
  211. {
  212.     list->window=reqbase->rb_window;
  213.     list->flags|=DLVF_SLOW;
  214.     list->sliderwidth=8;
  215.     list->slidercol=reqbase->rb_fg;
  216.     list->sliderbgcol=reqbase->rb_bg;
  217.     list->textcol=reqbase->rb_fg;
  218.     list->boxhi=reqbase->rb_shine;
  219.     list->boxlo=reqbase->rb_shadow;
  220.     list->arrowfg=reqbase->rb_fg;
  221.     list->arrowbg=reqbase->rb_bg;
  222.     list->itemfg=reqbase->rb_fg;
  223.     list->itembg=reqbase->rb_bg;
  224. }
  225.  
  226. void setup_strings()
  227. {
  228.     int a,b;
  229.  
  230.     for (a=0;a<5;a++)
  231.         for (b=0;b<6;b++) specific_gadtext[a][b]=NULL;
  232.     for (a=0;a<5;a++) specific_gadtext[0][a]=string_table[STR_BLOCKS+a];
  233.     specific_gadtext[1][4]=string_table[STR_LAST_CHANGED];
  234.  
  235.     for (a=2;a<4;a++) {
  236.         specific_gadtext[a][0]=string_table[STR_BLOCKS];
  237.         specific_gadtext[a][1]=string_table[STR_BYTES];
  238.         specific_gadtext[a][3]=string_table[STR_STACK];
  239.         specific_gadtext[a][4]=string_table[STR_LAST_CHANGED];
  240.     }
  241.  
  242.     specific_gadtext[4][4]=string_table[STR_LAST_CHANGED];
  243.  
  244.     for (a=0;a<8;a++) icon_type_names[a]=string_table[STR_DISK+a];
  245. }
  246.