home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / fm2000 / fmnode.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-02-04  |  8.1 KB  |  338 lines

  1. /*
  2.      Filemaster - Multitasking directory utility.
  3.      Copyright (C) 2000  Toni Wilen
  4.      
  5.      This program is free software; you can redistribute it and/or
  6.      modify it under the terms of the GNU General Public License
  7.      as published by the Free Software Foundation; either version 2
  8.      of the License, or (at your option) any later version.
  9.      
  10.      This program is distributed in the hope that it will be useful,
  11.      but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.      GNU General Public License for more details.
  14.      
  15.      You should have received a copy of the GNU General Public License
  16.      along with this program; if not, write to the Free Software
  17.      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  18. */
  19.  
  20.     
  21. #include <intuition/intuition.h>
  22. #include <libraries/commodities.h>
  23. #include <intuition/sghooks.h>
  24.  
  25. void ongadget(struct Gadget*,WORD);
  26. void offgadget(struct Gadget*,WORD);
  27. void runcommand(struct GadKeyTab*);
  28. WORD isdatatypes(struct FMHandle*,LONG);
  29. WORD checkmatch(UBYTE*,UBYTE*,UBYTE*,struct FMNode*,struct Match*,WORD);
  30. WORD smallevent(struct Window*,ULONG*,UWORD*);
  31. void clearlist(struct FMList*);
  32. struct FMNode* dupnode(struct FMNode*);
  33. WORD duplist(struct FMList*,struct FMList*);
  34. void siirra1(UBYTE*,UBYTE*,WORD);
  35. struct FMNode* dupnode(struct FMNode*);
  36. struct FMNode* allocnode(void);
  37. void removenode(struct FMList*,struct FMNode*);
  38. UBYTE* siirra2(UBYTE*,UBYTE*);
  39. struct FMNode* findselnode(struct FMList*);
  40. struct FMNode* findselnodeall(struct FMList*);
  41. WORD sselected(struct FMList*,WORD);
  42. struct FMNode* fmcreatedir(struct FMList*,UBYTE*);
  43. struct FMNode* disknode(struct FMList*,UBYTE*);
  44. void sformat(UBYTE*,UBYTE*,...);
  45. void sformatti(UBYTE*,UBYTE*,UBYTE*);
  46. void sformatmsg(UBYTE*,LONG,...);
  47. struct FMNode* scrollifneeded(struct FMList*,UWORD*,UWORD*);
  48. void parselist(struct FMList*,WORD);
  49. void outputlistline(struct FMList*,struct FMNode*);
  50. void fmmessage(struct FMList*);
  51. void outputlist(struct FMList*);
  52. void endofdirtxt(struct FMList*,struct FMNode*);
  53. WORD dosrequest(struct FMList*,WORD,UBYTE*,...);
  54. WORD dosrequestmsg(struct FMList*,WORD,LONG,...);
  55. WORD request(UBYTE*,WORD,WORD,UBYTE*,...);
  56. WORD requestmsg(UBYTE*,WORD,WORD,LONG,...);
  57. WORD askstring(struct Screen*,UBYTE*,UBYTE*,UBYTE*,WORD);
  58. WORD asklong(struct Screen*,UBYTE*,UBYTE*,LONG*,LONG,LONG);
  59. void strcpymsg(UBYTE*,WORD);
  60. ULONG dstolong(struct DateStamp*);
  61. void longtods(struct DateStamp*,ULONG);
  62. void longtodatestring(UBYTE*,ULONG);
  63. ULONG datestringtolong(UBYTE*);
  64. void csortlist(struct FMList*);
  65. void fmoutput(struct FMList*);
  66. void updatelist(struct FMList*);
  67. void updadirmeter(struct FMList*);
  68. void dirmeters(void);
  69. void siirran(UBYTE*,UBYTE*,WORD);
  70. void fittext(struct RastPort*,UBYTE*,WORD,WORD,WORD,WORD,WORD);
  71. UBYTE* siirrabstr(UBYTE*,UBYTE*);
  72. void textextent(struct RastPort*,UBYTE*,WORD*,WORD*);
  73. WORD strtohex(UBYTE*);
  74. void sethockeys(void);
  75. ULONG waitsig(ULONG);
  76.  
  77. void copyus(UBYTE*,UBYTE*);
  78. UBYTE scanus(UBYTE*);
  79. void memseti(void*,UBYTE,LONG);
  80.  
  81. #define FMPORTNAME "fm_port"
  82.  
  83. #define PATH 1024
  84. #define COLORS 16
  85. #define COLS 4
  86. #define ROWS 2
  87. #define LISTS 10
  88. #define WINDOWLISTS 8
  89. #define PATHLISTS 10
  90. #define PATTERN 128
  91. #define MSG 256
  92.  
  93. #include "config.h"
  94. #include "reqscroll.h"
  95.  
  96. struct GadKeyTab {
  97.     struct Gadget *g;
  98.     struct CMenuConfig *cmc;
  99.     UBYTE key[2];
  100.     unsigned listnum:4;
  101.     unsigned onelist:1;
  102.     unsigned unused:1;
  103. };
  104.  
  105. struct FMList {
  106.     struct    FMNode *head;
  107.     struct    FMNode *tail;
  108.     struct    FMNode *tailpred;
  109.     struct    ListInfo *li;
  110.     UWORD    keyline;
  111.     UWORD    keylinew;
  112.     UWORD    totlines;
  113.     UWORD    firstline;
  114.     UWORD    totlinesw;
  115.     UWORD    firstlinew;
  116.     UWORD    flags;
  117.     UWORD    listnumber;
  118.     struct    FMNode *lastclicked;
  119.     struct    FMList *pair;
  120.     UBYTE    fmmessage1[MSG];
  121.     UBYTE    fmmessage2[MSG];
  122.     UBYTE    path[PATH];
  123.     UBYTE    workname[32];
  124.     BPTR    oldcur;
  125. };
  126.  
  127. #define LALLOCATED 0x8000
  128. #define LSLIDERALLOC 0x4000
  129. #define LACTIVE 0x2000
  130. #define LABORTREQ 0x1000
  131. #define LSUBPROC 0x800
  132.  
  133. #define LDESTINATION 0x0004
  134. #define LSOURCE 0x0008
  135. #define LDIRLIST 0x0010
  136. #define LDEVLIST 0x0020
  137. #define LUPDATEMSG 0x0040
  138.  
  139. #define NDLEFT(n)    (((UBYTE*)n)+fmmain.leftoffset)
  140. #define NDLENGTH(n)    (((UBYTE*)n)+fmmain.lenoffset)
  141. #define NDFILE(n)    (((UBYTE*)n)+fmmain.fileoffset)
  142. #define NDPROT(n)    (((UBYTE*)n)+fmmain.protoffset)
  143. #define NDDATE(n)    (((UBYTE*)n)+fmmain.dateoffset)
  144. #define NDCOMM(n)    (((UBYTE*)n)+fmmain.commoffset)
  145.  
  146. struct FMNode {
  147.     struct    FMNode *succ;
  148.     struct    FMNode *pred;
  149.     UWORD    nodelen;
  150.     UWORD    flags;
  151.     ULONG    numlen;
  152.     ULONG    numprot;
  153.     ULONG    numdate;
  154. };
  155.  
  156. #define NDEVICE        0x4000
  157. #define NASSIGN        0x2000
  158. #define NDIRECTORY    0x1000
  159. #define NFILE        0x0800
  160. #define NKEYBOARD    0x0400
  161. #define NMATCHED    0x0200
  162. #define NBUFFER        0x0100
  163. #define NSELECTED    0x0001
  164.  
  165. struct FMPathlist {
  166.     struct    FMNode *head;
  167.     struct    FMNode *tail;
  168.     struct    FMNode *tailpred;
  169.     LONG    cnt;
  170.     UWORD    firstlinew;
  171.     UWORD    firstline;
  172.     UBYTE    path[PATH];
  173. };
  174.  
  175. #define LISTGADGETS 3
  176.  
  177. struct ListInfo {
  178.     struct    FMList *list;
  179.     UWORD    width;
  180.     UWORD    height;
  181.     UWORD    x;
  182.     UWORD    y;
  183.     UWORD    ex;
  184.     UWORD    ey;
  185.     UWORD    dirwidth;
  186.     UWORD    dirheight;
  187.     UWORD    dirx;    
  188.     UWORD    diry;
  189.     UWORD    edirx;
  190.     UWORD    ediry;
  191.     UWORD    visiblelines;
  192.     UWORD    visiblelinesw;
  193.     UWORD    topliney;
  194.     struct    Gadget slider1;
  195.     struct    PropInfo pinfo1;
  196.     struct    Image im1;
  197.     struct    Image sim1;
  198.     struct    Gadget slider2;
  199.     struct    PropInfo pinfo2;
  200.     struct    Image im2;
  201.     struct    Image sim2;
  202.     struct    Gadget string;
  203.     struct    StringInfo sinfo;
  204.     struct    StringExtend stext;
  205.     struct    ReqScrollStruct rscroll1;
  206.     struct    ReqScrollStruct rscroll2;
  207.     struct    Gadget taskgadget;
  208.     struct    Gadget ltaskgadget;
  209.     struct    Gadget rtaskgadget;
  210.     struct    Border bord1;
  211.     struct    Border bord2;
  212.     struct    Border bord3;
  213.     struct    Border bord4;
  214.     UWORD    linumber;
  215.     WORD    xy1[2*5];
  216.     WORD    xy2[2*5];
  217. //    WORD    lihack; // lihack==number
  218. };
  219.  
  220. struct FMMain {
  221.     struct    Screen *naytto;
  222.     struct    Window *ikkuna;
  223.     struct    FMList *sourcedir;
  224.     struct    FMList *destdir;
  225.     WORD    txtysize;
  226.     WORD    txtxsize;
  227.     WORD    txtbaseline;
  228.     WORD    listysize;
  229.     WORD    listxsize;
  230.     WORD    listbaseline;
  231.     WORD    reqysize;
  232.     WORD    reqxsize;
  233.     WORD    reqbaseline;
  234.     WORD    txtshowysize;
  235.     WORD    txtshowxsize;
  236.     WORD    txtshowbaseline;
  237.     WORD    messageliney1;
  238.     WORD    messageliney2;
  239.     WORD    bottomliney;
  240.     WORD    bottomlinewidth;
  241.     struct    ListInfo *li[WINDOWLISTS];
  242.     WORD    uselist[WINDOWLISTS];
  243.  
  244.     struct    RastPort *rp;
  245.     struct    TextFont *txtfont;
  246.     struct    TextFont *listfont;
  247.     struct    TextFont *txtshowfont;
  248.     struct    TextFont *reqfont;
  249.     struct    TextFont *normalfont;
  250.     struct    TextFont *smallfont;
  251.     struct    TextAttr tattr;
  252.     struct    Process *myproc;
  253.     struct    Process *timeproc;
  254.     APTR    gtvisual;
  255.     APTR    oldwinptr;
  256.     struct    Gadget *firstgadget;
  257.     UBYTE    undobuf[PATH];
  258.  
  259.     WORD    gadgetxy[TOTALCOMMANDS*4];
  260.     WORD    cmenux,cmenuy;
  261.     WORD    totalcmenuwidth,totalcmenuheight;
  262.     WORD    cmenuwidth;        //min gadget width
  263.     WORD    realcmenuspace;        //width/height of cmenu space
  264.     WORD    cmenugadnumperline;    //number of gadgets per line
  265.     WORD    cmenu;            //first gadget
  266.     UBYTE    *cmenuptr;        //ptr to texts
  267.  
  268.     UWORD    leftoffset;
  269.     UWORD    lenoffset;
  270.     UWORD    fileoffset;
  271.     UWORD    protoffset;
  272.     UWORD    dateoffset;
  273.     UWORD    commoffset;
  274.     UWORD    maxdirlistwidth;
  275.     UWORD    totnodelen;
  276.     UWORD    filelen;
  277.     UWORD    commlen;
  278.     UWORD    datelen;
  279.     UWORD    lenlen;
  280.     UWORD    protlen;
  281.     UWORD    memmeterlen;
  282.     UBYTE    version;
  283.     UBYTE    revision;
  284.     UBYTE    betaversion;
  285.     UBYTE    betarevision;
  286.  
  287.     // global clock-task variables
  288.  
  289.     volatile signed clock:2;
  290.     volatile unsigned kill:1;
  291.     volatile unsigned sleepon:3;
  292.     volatile unsigned fmactive:2;
  293.     volatile UBYTE passhotkey;
  294.     volatile LONG timer;
  295.  
  296.     UWORD    modflag;
  297.     APTR    modptr;
  298.     UBYTE    *starts[33];
  299.     struct    IOAudio *audio;
  300.  
  301.     ULONG    secs;
  302.     ULONG    mics;
  303.     UBYTE    kick;
  304.     UBYTE    quitti;
  305.     UBYTE    wincnt;
  306.     WORD    newconfig;
  307.     BPTR    oldcur;
  308.  
  309.     struct    FMPathlist *pathlist;
  310.     WORD    numpathlist;
  311.     struct    FMList dlist;
  312.     struct    SignalSemaphore gfxsema;
  313.     struct    SignalSemaphore msgsema;
  314.     struct    SignalSemaphore poolsema;
  315.     APTR    pool;
  316.     struct    MsgPort *appiconport;
  317.     struct    AppIcon *appicon;
  318.     struct    DiskObject *dobj;
  319.     struct    MsgPort *appwinport;
  320.     struct    AppWindow *appwin;
  321.     struct    MsgPort *cxport;
  322.     CxObj    *broker;
  323.     struct    FMNode *framenode;
  324.     struct    FMList *framelist;
  325.     struct    GadKeyTab gadkeytab[TOTALCOMMANDS+4*WINDOWLISTS];
  326.     struct    InputXpression *ix[TOTALCOMMANDS+4*WINDOWLISTS];
  327.     struct    FMPort *fmport;
  328.     struct    ProcMsg *pmsg;
  329.  
  330.     UBYTE    fmtitlename[128];
  331.     UBYTE    fmtitle[32];
  332.     UBYTE    fmdate[32];
  333.     UBYTE    regname[32];
  334.     UWORD    shareware;
  335. };
  336.  
  337.  
  338.