#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "afcopy_defines.h" #include "afcopy_protos.h" #include "afcopy_vars.h" /* define external vars */ #define SPACEBETWEENGADGETS 0 char *upcase(char *str) { // converts str into uppercase and returns a pointer to a new // string. // returns NULL if it fails. char *outstr=NULL; short loop; if (outstr=strdup(str)) { for (loop=0;str[loop];loop++) outstr[loop]=toupper(str[loop]); } return(outstr); } short position(char *substr,char *str) { // returns an character offset of a substring in a string // this version is CASE SENSITIVE // returns -1 if substring not found in the string char *whstr; return((short)((whstr=strstr(str,substr)) ? (short)((LONG)whstr-(LONG)str) : -1)); } short iposition(char *substr,char *str) { // returns an character offset of a substring in a string // this version is CASE INSENSITIVE // returns -1 if substring not found in the string // or -2 if memory allocation error short where=-2; char *isubstr,*istr; if (isubstr=upcase(substr)) { if (istr=upcase(str)) { where=position(isubstr,istr); free(isubstr); } free(istr); } return(where); } void strpad(char *str,int newlength) { while (strlen(str)RPort,X,Y); Text(Win->RPort,string,strlen(string) < 70 ? strlen(string) : 70); } void addterm(char *s) { if (s[strlen(s)-1]!=':' && s[strlen(s)-1]!='/') strcat(s,"/"); } void delterm(char *s) { if (s[strlen(s)-1]=='/') s[strlen(s)-1]='\0'; } void getparent(char *s) { int l; addterm(s); l=strlen(s); if (s[l-1]=='/') { l--; while (s[l-1]!='/' && s[l-1]!=':') l--; s[l]='\0'; } } BOOL inrect(int X,int Y,int X1,int Y1,int X2, int Y2) { if (X>=X1 && X<=X2 && Y>=Y1 && Y<=Y2) return(TRUE); else return(FALSE); } void IoErrMsg(char *MsgString,int ErrorNum) { switch (ErrorNum) { case 1:strcpy(MsgString,"Operation Cancelled");break; case 103:strcpy(MsgString,"No Free Store");break; case 105:strcpy(MsgString,"Task Table Full");break; case 114:strcpy(MsgString,"Bad Template");break; case 115:strcpy(MsgString,"Bad Number");break; case 116:strcpy(MsgString,"Required Arg Missing");break; case 117:strcpy(MsgString,"Key Needs Arg");break; case 118:strcpy(MsgString,"Too Many Args");break; case 119:strcpy(MsgString,"Unmatched Quotes");break; case 120:strcpy(MsgString,"Line Too Long");break; case 121:strcpy(MsgString,"File Not Object");break; case 122:strcpy(MsgString,"Invalid Resident Library");break; case 201:strcpy(MsgString,"No Default Dir");break; case 202:strcpy(MsgString,"Object In Use");break; case 203:strcpy(MsgString,"Object Exists");break; case 204:strcpy(MsgString,"Dir Not Found");break; case 205:strcpy(MsgString,"Object Not Found");break; case 206:strcpy(MsgString,"Bad Stream Name");break; case 207:strcpy(MsgString,"Object Too Large");break; case 209:strcpy(MsgString,"Action Not Known");break; case 210:strcpy(MsgString,"Invalid Component Name");break; case 211:strcpy(MsgString,"Invalid Lock");break; case 212:strcpy(MsgString,"Object Wrong Type");break; case 213:strcpy(MsgString,"Disk Not Validated");break; case 214:strcpy(MsgString,"Disk Write Protected");break; case 215:strcpy(MsgString,"Rename Across Devices");break; case 216:strcpy(MsgString,"Directory Not Empty");break; case 217:strcpy(MsgString,"Too Many Levels");break; case 218:strcpy(MsgString,"Device Not Mounted");break; case 219:strcpy(MsgString,"Seek Error");break; case 220:strcpy(MsgString,"Comment Too Big");break; case 221:strcpy(MsgString,"Disk Full");break; case 222:strcpy(MsgString,"Delete Protected");break; case 223:strcpy(MsgString,"Write Protected");break; case 224:strcpy(MsgString,"Read Protected or Read Error");break; case 225:strcpy(MsgString,"Not a DOS Disk");break; case 226:strcpy(MsgString,"No Disk");break; case 232:strcpy(MsgString,"No More Entries");break; case 233:strcpy(MsgString,"Is Soft Link");break; case 234:strcpy(MsgString,"Object Linked");break; case 235:strcpy(MsgString,"Bad Hunk");break; case 236:strcpy(MsgString,"Not Implemented");break; case 240:strcpy(MsgString,"Record Not Locked");break; case 241:strcpy(MsgString,"Lock Collision");break; case 242:strcpy(MsgString,"Lock Timeout");break; case 243:strcpy(MsgString,"Unlock Error");break; default:strcpy(MsgString,"Undefined Error!");break; } } /**************************************************************************************** Main Gadget And Gadget Config Routines. ****************************************************************************************/ struct Gadget *createAllGadgets(struct Gadget **glistptr, void *vi, UWORD topborder, struct Gadget *my_gads[]) { struct NewGadget ng; struct Gadget *gad; gad = CreateContext(glistptr); ng.ng_TopEdge = 1+topborder; ng.ng_LeftEdge = 286-18; ng.ng_Width = 17; ng.ng_Height = 11; ng.ng_TextAttr = &ScreenFontAttr; ng.ng_VisualInfo = vi; ng.ng_GadgetText = "S"; ng.ng_GadgetID = G_SortLeft; ng.ng_Flags = NG_HIGHLABEL|PLACETEXT_IN; my_gads[G_SortLeft] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_LeftEdge = 286+68+1; ng.ng_GadgetID = G_SortRight; ng.ng_Flags = NG_HIGHLABEL|PLACETEXT_IN; my_gads[G_SortRight] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_Height = (lines_per_side*FILEHEIGHT+83) / 23; ng.ng_Width = 68; ng.ng_LeftEdge = 286; ng.ng_GadgetText = "_Copy"; ng.ng_GadgetID = G_Copy; my_gads[G_Copy] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "_Swap"; ng.ng_GadgetID = G_Swap; my_gads[G_Swap] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "_Rename"; ng.ng_GadgetID = G_Rename; my_gads[G_Rename] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "_Delete"; ng.ng_GadgetID = G_Delete; my_gads[G_Delete] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "Cl_one"; ng.ng_GadgetID = G_Clone; my_gads[G_Clone] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "_View"; ng.ng_GadgetID = G_View; my_gads[G_View] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "Re_ad"; ng.ng_GadgetID = G_Read; my_gads[G_Read] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "_Edit"; ng.ng_GadgetID = G_Edit; my_gads[G_Edit] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "_Hear"; ng.ng_GadgetID = G_Hear; my_gads[G_Hear] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "_Info"; ng.ng_GadgetID = G_Info; my_gads[G_Info] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "E_xecute"; ng.ng_GadgetID = G_Execute; my_gads[G_Execute] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "Run"; ng.ng_GadgetID = G_Run; my_gads[G_Run] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "Commen_t"; ng.ng_GadgetID = G_Comment; my_gads[G_Comment] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "_Protect"; ng.ng_GadgetID = G_Protect; my_gads[G_Protect] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "Archive"; ng.ng_GadgetID = G_Archive; my_gads[G_Archive] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "_Unarc"; ng.ng_GadgetID = G_Unarc; my_gads[G_Unarc] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "_MakeDir"; ng.ng_GadgetID = G_Makedir; my_gads[G_Makedir] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "Mark"; ng.ng_GadgetID = G_Mark; my_gads[G_Mark] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "UnMark"; ng.ng_GadgetID = G_Unmark; my_gads[G_Unmark] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "Reverse"; ng.ng_GadgetID = G_Reverse; my_gads[G_Reverse] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "Dos"; ng.ng_GadgetID = G_Dos; my_gads[G_Dos] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "_Batch"; ng.ng_GadgetID = G_Batch; my_gads[G_Batch] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_TopEdge += SPACEBETWEENGADGETS+ng.ng_Height; ng.ng_GadgetText = "Vo_lumes"; ng.ng_GadgetID = G_Volumes; my_gads[G_Volumes] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_LeftEdge = filexpos[0]-1; ng.ng_TopEdge = lines_per_side * FILEHEIGHT+2+FILEYPOS+topborder; /* + 2 to avoid border clash! */ ng.ng_Width = FILEWIDTH-12; ng.ng_Height = 14; ng.ng_GadgetText = NULL; ng.ng_GadgetID = G_Pathleft; my_gads[G_Pathleft] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, NULL, GTST_MaxChars, 300, TAG_END); ng.ng_LeftEdge = filexpos[1]+14; ng.ng_Width = ng.ng_Width; ng.ng_GadgetID = G_Pathright; my_gads[G_Pathright] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, NULL, GTST_MaxChars, 300, TAG_END); ng.ng_LeftEdge = 268; ng.ng_TopEdge = FILEYPOS+topborder-1; ng.ng_Width = 17; ng.ng_Height = lines_per_side * FILEHEIGHT+2; ng.ng_GadgetText = NULL; ng.ng_GadgetID = G_Sliderleft; ng.ng_Flags = NG_HIGHLABEL; my_gads[G_Sliderleft] = gad = CreateGadget(SCROLLER_KIND, gad, &ng, GTSC_Top, 0, GTSC_Total, 1, GTSC_Visible, 1, GTSC_Arrows, 10, PGA_Freedom, LORIENT_VERT, GT_Underscore, '_', TAG_END); ng.ng_LeftEdge = 355; ng.ng_GadgetID = G_Sliderright; my_gads[G_Sliderright] = gad = CreateGadget(SCROLLER_KIND, gad, &ng, GTSC_Top, 0, GTSC_Total, 1, GTSC_Visible, 1, GTSC_Arrows, 10, PGA_Freedom, LORIENT_VERT, GT_Underscore, '_', TAG_END); ng.ng_LeftEdge = 268; ng.ng_TopEdge += ng.ng_Height+1; ng.ng_Width = 17; ng.ng_Height = 14; ng.ng_GadgetText = "/"; ng.ng_GadgetID = G_Parentleft; ng.ng_Flags = NG_HIGHLABEL|PLACETEXT_IN; my_gads[G_Parentleft] = gad = CreateGadget(BUTTON_KIND, gad, &ng, TAG_END); ng.ng_Width = 14; ng.ng_LeftEdge -= ng.ng_Width+1; ng.ng_GadgetText = "R"; ng.ng_GadgetID = G_Regetleft; my_gads[G_Regetleft] = gad = CreateGadget(BUTTON_KIND, gad, &ng, TAG_END); ng.ng_LeftEdge = 355; ng.ng_Width = 17; ng.ng_GadgetID = G_Parentright; ng.ng_GadgetText = "/"; my_gads[G_Parentright] = gad = CreateGadget(BUTTON_KIND, gad, &ng, TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_Width = 14; ng.ng_GadgetText = "R"; ng.ng_GadgetID = G_Regetright; my_gads[G_Regetright] = gad = CreateGadget(BUTTON_KIND, gad, &ng, TAG_END); /* Device Gadgets Bottom Left First Row */ ng.ng_LeftEdge = filexpos[0]-1; ng.ng_TopEdge += ng.ng_Height+1; ng.ng_Width = 45; ng.ng_Height = 10; ng.ng_GadgetText = devicegadnames[0][0]; ng.ng_GadgetID = G_Deviceleft0; ng.ng_Flags = NG_HIGHLABEL|PLACETEXT_IN; my_gads[G_Deviceleft0] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[0][1]; ng.ng_GadgetID = G_Deviceleft1; my_gads[G_Deviceleft1] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[0][2]; ng.ng_GadgetID = G_Deviceleft2; my_gads[G_Deviceleft2] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[0][3]; ng.ng_GadgetID = G_Deviceleft3; my_gads[G_Deviceleft3] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[0][4]; ng.ng_GadgetID = G_Deviceleft4; my_gads[G_Deviceleft4] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[0][5]; ng.ng_GadgetID = G_Deviceleft5; ng.ng_Width = 44; my_gads[G_Deviceleft5] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); /* Device Gadgets Bottom Right First Row */ ng.ng_LeftEdge = 355; ng.ng_Width = 45; ng.ng_GadgetText = devicegadnames[1][0]; ng.ng_GadgetID = G_Deviceright0; my_gads[G_Deviceright0] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[1][1]; ng.ng_GadgetID = G_Deviceright1; my_gads[G_Deviceright1] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[1][2]; ng.ng_GadgetID = G_Deviceright2; my_gads[G_Deviceright2] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[1][3]; ng.ng_GadgetID = G_Deviceright3; my_gads[G_Deviceright3] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[1][4]; ng.ng_GadgetID = G_Deviceright4; my_gads[G_Deviceright4] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[1][5]; ng.ng_GadgetID = G_Deviceright5; ng.ng_Width = 44; my_gads[G_Deviceright5] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); /* Device Gadgets Bottom Left Second Row */ ng.ng_LeftEdge = filexpos[0]-1; ng.ng_Width = 45; ng.ng_TopEdge += ng.ng_Height+1; ng.ng_GadgetText = devicegadnames[0][6]; ng.ng_GadgetID = G_Deviceleft6; ng.ng_Flags = NG_HIGHLABEL|PLACETEXT_IN; my_gads[G_Deviceleft6] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[0][7]; ng.ng_GadgetID = G_Deviceleft7; my_gads[G_Deviceleft7] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[0][8]; ng.ng_GadgetID = G_Deviceleft8; my_gads[G_Deviceleft8] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[0][9]; ng.ng_GadgetID = G_Deviceleft9; my_gads[G_Deviceleft9] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[0][10]; ng.ng_GadgetID = G_Deviceleft10; my_gads[G_Deviceleft10] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[0][11]; ng.ng_GadgetID = G_Deviceleft11; ng.ng_Width = 44; my_gads[G_Deviceleft11] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); /* Device Gadgets Bottom Right Second Row */ ng.ng_LeftEdge = 355; ng.ng_Width = 45; ng.ng_GadgetText = devicegadnames[1][6]; ng.ng_GadgetID = G_Deviceright6; my_gads[G_Deviceright6] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[1][7]; ng.ng_GadgetID = G_Deviceright7; my_gads[G_Deviceright7] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[1][8]; ng.ng_GadgetID = G_Deviceright8; my_gads[G_Deviceright8] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[1][9]; ng.ng_GadgetID = G_Deviceright9; my_gads[G_Deviceright9] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[1][10]; ng.ng_GadgetID = G_Deviceright10; my_gads[G_Deviceright10] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+2; ng.ng_GadgetText = devicegadnames[1][11]; ng.ng_GadgetID = G_Deviceright11; ng.ng_Width = 44; my_gads[G_Deviceright11] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); /* User Gadgets Bottom Left First Row */ ng.ng_LeftEdge = filexpos[0]-1; ng.ng_TopEdge += ng.ng_Height+1; ng.ng_Width = 55; ng.ng_Height = 10; ng.ng_GadgetText = usergadnames[0][0]; ng.ng_GadgetID = G_Userleft0; ng.ng_Flags = NG_HIGHLABEL|PLACETEXT_IN; my_gads[G_Userleft0] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][1]; ng.ng_GadgetID = G_Userleft1; my_gads[G_Userleft1] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][2]; ng.ng_GadgetID = G_Userleft2; my_gads[G_Userleft2] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][3]; ng.ng_GadgetID = G_Userleft3; my_gads[G_Userleft3] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][4]; ng.ng_GadgetID = G_Userleft4; my_gads[G_Userleft4] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); /* User Gadgets Bottom Right First Row */ ng.ng_LeftEdge = 355; ng.ng_GadgetText = usergadnames[1][0]; ng.ng_GadgetID = G_Userright0; my_gads[G_Userright0] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][1]; ng.ng_GadgetID = G_Userright1; my_gads[G_Userright1] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][2]; ng.ng_GadgetID = G_Userright2; my_gads[G_Userright2] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][3]; ng.ng_GadgetID = G_Userright3; my_gads[G_Userright3] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][4]; ng.ng_GadgetID = G_Userright4; my_gads[G_Userright4] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); /* User Gadgets Bottom Left Second Row */ ng.ng_LeftEdge = filexpos[0]-1; ng.ng_TopEdge += ng.ng_Height+0; ng.ng_GadgetText = usergadnames[0][5]; ng.ng_GadgetID = G_Userleft5; ng.ng_Flags = NG_HIGHLABEL|PLACETEXT_IN; my_gads[G_Userleft5] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][6]; ng.ng_GadgetID = G_Userleft6; my_gads[G_Userleft6] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][7]; ng.ng_GadgetID = G_Userleft7; my_gads[G_Userleft7] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][8]; ng.ng_GadgetID = G_Userleft8; my_gads[G_Userleft8] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][9]; ng.ng_GadgetID = G_Userleft9; my_gads[G_Userleft9] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); /* User Gadgets Bottom Right Second Row */ ng.ng_LeftEdge = 355; ng.ng_GadgetText = usergadnames[1][5]; ng.ng_GadgetID = G_Userright5; my_gads[G_Userright5] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][6]; ng.ng_GadgetID = G_Userright6; my_gads[G_Userright6] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][7]; ng.ng_GadgetID = G_Userright7; my_gads[G_Userright7] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][8]; ng.ng_GadgetID = G_Userright8; my_gads[G_Userright8] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][9]; ng.ng_GadgetID = G_Userright9; my_gads[G_Userright9] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); /* User Gadgets Bottom Left third Row */ ng.ng_LeftEdge = filexpos[0]-1; ng.ng_TopEdge += ng.ng_Height+0; ng.ng_GadgetText = usergadnames[0][10]; ng.ng_GadgetID = G_Userleft10; ng.ng_Flags = NG_HIGHLABEL|PLACETEXT_IN; my_gads[G_Userleft10] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][11]; ng.ng_GadgetID = G_Userleft11; my_gads[G_Userleft11] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][12]; ng.ng_GadgetID = G_Userleft12; my_gads[G_Userleft12] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][13]; ng.ng_GadgetID = G_Userleft13; my_gads[G_Userleft13] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[0][14]; ng.ng_GadgetID = G_Userleft14; my_gads[G_Userleft14] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); /* User Gadgets Bottom Right third Row */ ng.ng_LeftEdge = 355; ng.ng_GadgetText = usergadnames[1][10]; ng.ng_GadgetID = G_Userright10; my_gads[G_Userright10] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][11]; ng.ng_GadgetID = G_Userright11; my_gads[G_Userright11] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][12]; ng.ng_GadgetID = G_Userright12; my_gads[G_Userright12] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][13]; ng.ng_GadgetID = G_Userright13; my_gads[G_Userright13] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_LeftEdge += ng.ng_Width+1; ng.ng_GadgetText = usergadnames[1][14]; ng.ng_GadgetID = G_Userright14; my_gads[G_Userright14] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); /* * Keys used in underscore of gadgets are as follows... * * CSRDOVEAHXTPUM * S Swap * R Rename * D Delete * O Clone * V View * E Edit * A Read * H Hear * * Keys that'll be used for other stuff * * ' Run * + Mark All * - Mark All * * Reverse Marks * */ return(gad); } void blankusergads( void ) { int loop1,loop2; for (loop1=0;loop1<2;loop1++) { for (loop2=0;loop2<10;loop2++) { strcpy(usergadnames[loop1][loop2],""); strcpy(usergadactual[loop1][loop2],""); usergadflags[loop1][loop2]=0; } } } void strfcpy(char *dest,char *source,int from) { /* copy all chars from "source" to "dest" starting at offset "from" (kinda the reverse from strncpy() ) */ int loop=from,pos=0; if (from<=strlen(source)-1) { while (source[loop]) { dest[pos]=source[loop]; loop++; pos++; } } dest[pos]=0; } void stripcr(char *s) /* Strips \n From End Of String */ { if (s[strlen(s)-1]==10) s[strlen(s)-1]=0; } void mfgets(char *str,int len,FILE *f) { char c; fgets(str,len+2,f); /* +1 for the ! and +1 cos array starts at 0 */ c=fgetc(f); if (c!=10) ungetc(c,f); stripcr(str); } void swapem(int side,int i, int j) { BOOL tag; char string[MAX_FILE_LEN+1]; LONG type; strcpy(string,filename[side][i]); strcpy(filename[side][i],filename[side][j]); strcpy(filename[side][j],string); tag=filetags[side][i]; filetags[side][i]=filetags[side][j]; filetags[side][j]=tag; type=filetype[side][i]; filetype[side][i]=filetype[side][j]; filetype[side][j]=type; type=filesize[side][i]; filesize[side][i]=filesize[side][j]; filesize[side][j]=type; type=filedate[side][i]; filedate[side][i]=filedate[side][j]; filedate[side][j]=type; } void qsortdirs(int side,int l,int r) { int i,j; int x; #ifdef DEBUGALL puts("qsortdirs()"); #endif i=l;j=r;x=filetype[side][(l+r) / 2]; do { while (filetype[side][i]>x) i++; while (x>filetype[side][j]) j--; if (i<=j) { swapem(side,i,j); i++;j--; } } while (i<=j); if (lsz) i++; while (sz>filedate[side][j]) j--; if (i<=j) { swapem(side,i,j); i++;j--; } break; case S_NAME: while (stricmp(filename[side][i],x)<0) i++; while (stricmp(x,filename[side][j])<0) j--; if (i<=j) { swapem(side,i,j); i++;j--; } break; case S_SIZE: while (filesize[side][i]>sz) i++; while (sz>filesize[side][j]) j--; if (i<=j) { swapem(side,i,j); i++;j--; } break; } } while (i<=j); if (l0) { if (!mixfilesanddraws) { qsortdirs(side,l,r); while (offs0) offs++; qsortall(side,0, offs > 1 ? offs-1 : 0); if (offs!=totalfiles[side]) { qsortall(side,offs,totalfiles[side]-1); } } else { qsortall(side,l,r); } } } BOOL DoDiskInfo(int side,char *path) { BOOL retval=TRUE; BPTR FL; struct InfoData *di; char outputstr[51]="Error"; #ifdef DEBUG puts("DoDiskInfo()"); #endif if ((FL=Lock(path,ACCESS_READ))) { if ((di=AllocMem(sizeof(struct InfoData),MEMF_PUBLIC))) { if (Info(FL,di)) { sprintf(outputstr," %3.0f\% %7.0f KB",((float)di->id_NumBlocksUsed/(float)di->id_NumBlocks)*100, (float)((di->id_NumBlocks-di->id_NumBlocksUsed) * di->id_BytesPerBlock) / (float)1024); outputstr[35]='\0'; } FreeMem(di,sizeof(struct InfoData)); } UnLock(FL); } else { strcpy(outputstr,"No Directory"); retval=FALSE; } strpad(outputstr,MAX_FILE_LEN); SetAPen(W->RPort,2); SetBPen(W->RPort,0); OutTextXY(W,filexpos[side]+2,FONTBASELINE+topborder+3,outputstr); DrawBevelBox(W->RPort,filexpos[side]-1,topborder+1,FILEWIDTH+3,11, GT_VisualInfo,vi,TAG_DONE); updateselected(side); return(retval); } void clearside(int side) { #ifdef DEBUG puts("clearside()"); #endif SetAPen(W->RPort,0); SetBPen(W->RPort,0); RectFill(W->RPort,filexpos[side]+1,topborder+FILEYPOS, filexpos[side]+FILEWIDTH-1,topborder+FILEYPOS+(FILEHEIGHT*lines_per_side)-1); } void updateslider(int side) { #ifdef DEBUG puts("updateslider()"); #endif GT_SetGadgetAttrs(my_gads[G_Sliderleft+side], W, NULL, GTSC_Top, 0, GTSC_Total, totalfiles[side], GTSC_Visible, totalfiles[side] < lines_per_side ? totalfiles[side] : lines_per_side, TAG_END); } void replace(char *dest,char *compare,char *from,char *to) { /* replace all occurences of "from" in "compare" with "to" and store result in "dest" (note: this is dead usefull!!!) */ int where; char *mystring=strdup(compare); strcpy(dest,""); do { where=position(from,mystring); if (where!=-1) { strncat(dest,mystring,where); /* copy first part of string */ strcat(dest,to); /* add repeaced chars */ strfcpy(mystring,mystring,where+strlen(from)); /* copy rest of string so we find first position of from */ } } while (where!=-1); /* keep doing until "from" is not found */ strcat(dest,mystring); /* add the rest of the string */ } void getextension(char *dest,char *source) { int loop; strcpy(dest,""); if (position(".",source)!=-1) { for (loop=strlen(source);source[loop-1]!='.';loop--); strfcpy(dest,source,loop); } } void getname(char *dest,char *source) { int loop; if (position(".",source)!=-1) { strcpy(dest,""); for (loop=strlen(source)-1;source[loop]!='.';loop--); strncpy(dest,source,loop); /* copy from start to position of last "." in "source" -1 */ dest[loop]='\0'; /* due to an error with strncpy!!! */ } else strcpy(dest,source); } void createstring(char *tmpstr,char *batchstr,int side,int otherside,int current,int opts) { char temp[32]=""; switch (opts) { case CS_ALL: replace(tmpstr,batchstr,"@F@",filename[side][current]); /* note: there is no, and should not be, a "break;" here. */ case CS_NOFILES: getextension(temp,filename[side][current]); if (stricmp(temp,"")) replace(tmpstr,tmpstr,"@E@",temp); getname(temp,filename[side][current]); if (stricmp(temp,"")) replace(tmpstr,tmpstr,"@N@",temp); replace(tmpstr,tmpstr,"@<@",cpath[side]); replace(tmpstr,tmpstr,"@>@",cpath[otherside]); break; } } struct Gadget *createStatGadgets(struct Gadget **glistptr, void *vi, UWORD topborder, struct Gadget *gads[]) { struct NewGadget ng; struct Gadget *gad; #ifdef DEBUG puts("createStatGadgets()"); #endif gad = CreateContext(glistptr); ng.ng_LeftEdge = 5; ng.ng_TopEdge = 1+topborder; ng.ng_Width = STATWIDTH-10; ng.ng_Height = 10; ng.ng_GadgetText = "Cancel"; ng.ng_TextAttr = &ScreenFontAttr; ng.ng_VisualInfo = vi; ng.ng_GadgetID = G_StatCancel; ng.ng_Flags = NG_HIGHLABEL|PLACETEXT_IN; gads[G_StatCancel] = gad = CreateGadget(BUTTON_KIND, gad, &ng,GT_Underscore, '_',TAG_END); ng.ng_LeftEdge = 5; ng.ng_TopEdge = topborder+55; ng.ng_Width = STATWIDTH-10; ng.ng_Height = 60; ng.ng_GadgetText = NULL; ng.ng_VisualInfo = vi; ng.ng_GadgetID = G_ErrorList; ng.ng_Flags = NG_HIGHLABEL; gads[G_ErrorList] = gad = CreateGadget(LISTVIEW_KIND, gad, &ng, GTLV_Labels,ErrorList, TAG_END); return(gad); } struct Window *OpenStatWindow(void) { #ifdef DEBUG puts("OpenStatWindow()"); #endif return(OpenWindowTags(NULL, WA_Left,W->LeftEdge+STATLEFT, WA_Top,W->TopEdge+STATTOP, WA_Width,STATWIDTH, WA_Height,STATHEIGHT, WA_MinWidth,STATWIDTH, WA_MinHeight,STATHEIGHT, WA_AutoAdjust, FALSE, WA_DragBar, TRUE, WA_DepthGadget, TRUE, WA_Activate, TRUE, WA_SmartRefresh, TRUE, WA_Zoom, zoomcoords, WA_IDCMP, BUTTONIDCMP, WA_Title,"Status!", WA_PubScreen, mysc, WA_Gadgets,statglist, WA_ScreenTitle,screentitle, TAG_END)); } void remspaces(char *dest,char *source) { /* remove white space space from the front of a string */ while (source[0]==' ' || source[0]=='\t') strfcpy(dest,source,1); }