#include #include #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" #include "afcopy_version.h" static struct NewMenu CfgNewMenu[] = { NM_TITLE, (STRPTR)"Devs (Left)", NULL, 0, NULL, NULL, NM_ITEM, (STRPTR)"Top 1", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 2", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 3", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 4", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 5", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 6", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 1", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 2", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 3", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 4", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 5", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 6", NULL, 0, 0L, NULL, NM_TITLE, (STRPTR)"Devs (Right)", NULL, 0, NULL, NULL, NM_ITEM, (STRPTR)"Top 1", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 2", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 3", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 4", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 5", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 6", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 1", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 2", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 3", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 4", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 5", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 6", NULL, 0, 0L, NULL, NM_TITLE, (STRPTR)"User Gads (Left)", NULL, 0, NULL, NULL, NM_ITEM, (STRPTR)"Top 1", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 2", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 3", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 4", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 5", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Middle 1", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Middle 2", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Middle 3", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Middle 4", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Middle 5", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 1", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 2", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 3", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 4", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 5", NULL, 0, 0L, NULL, NM_TITLE, (STRPTR)"User Gads (Right)", NULL, 0, NULL, NULL, NM_ITEM, (STRPTR)"Top 1", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 2", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 3", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 4", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Top 5", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Middle 1", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Middle 2", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Middle 3", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Middle 4", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Middle 5", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 1", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 2", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 3", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 4", NULL, 0, 0L, NULL, NM_ITEM, (STRPTR)"Bottom 5", NULL, 0, 0L, NULL, NM_TITLE, (STRPTR)"Misc", NULL, 0, NULL, NULL, NM_ITEM, (STRPTR)"Select Font", NULL, 0, 0L, NULL, NM_END, NULL, NULL, 0, 0L, NULL }; BOOL LoadConfig(char *configname) { FILE *cfgf; char cfgstr[MAX_PATH_LEN+1]; int loop,loop2,v,r; BOOL retval=FALSE; if ((cfgf=fopen(configname,"r"))==NULL) { return(FALSE); } else { if (fscanf(cfgf,"%6s",cfgstr)==1 && strcmp("AFCOPY",cfgstr)==0) { mfgets(cfgstr,MAX_PATH_LEN,cfgf); mfgets(cfgstr,MAX_PATH_LEN,cfgf); v=atoi(cfgstr); mfgets(cfgstr,MAX_PATH_LEN,cfgf); mfgets(cfgstr,MAX_PATH_LEN,cfgf); r=atoi(cfgstr); if (v!=VERSION || r!=REVISION) { rtEZRequest ("Old Config File Found\n" "in a format that this\n" "version cannot read!\n",okmsg,NULL,(struct TagItem *)&reqtags,NULL); } else { mfgets(cfgstr,MAX_PATH_LEN,cfgf); strfcpy(cpath[0],cfgstr,1); mfgets(cfgstr,MAX_PATH_LEN,cfgf); strfcpy(cpath[1],cfgstr,1); mfgets(cfgstr,MAX_PATH_LEN,cfgf); strfcpy(defaulticonfile,cfgstr,1); mfgets(cfgstr,MAX_CANCELCONTMSG_LEN,cfgf); /**/ strfcpy(cancelcontmsg,cfgstr,1); mfgets(cfgstr,MAX_PATH_LEN,cfgf); /**/ strfcpy(outputcon,cfgstr,1); for (loop=0;loopLeftEdge+165, WA_Top,W->TopEdge+50, WA_Width,310, WA_Height,128, WA_AutoAdjust, FALSE, WA_DragBar, TRUE, WA_DepthGadget, TRUE, WA_Activate, TRUE, WA_CloseGadget, TRUE, WA_SimpleRefresh, FALSE, WA_IDCMP, IDCMP_CLOSEWINDOW, WA_Title,"Modify Gadget!", WA_PubScreen, mysc, WA_Gadgets,modglist, WA_ScreenTitle,screentitle, TAG_END)); } BOOL ModGadget(int side, int num) /* returns -1 if failed or cancelled.. */ { struct IntuiMessage *imsg; BOOL done=FALSE; if (createModGadgets(&modglist, vi, topborder,modgads,side,num)) { if ((modw=OpenModWindow())) { do { Wait (1 << modw->UserPort->mp_SigBit); if ((imsg = GT_GetIMsg(modw->UserPort))) { if (imsg->Class == IDCMP_CLOSEWINDOW) { done=TRUE; } GT_ReplyIMsg(imsg); } } while (!done); CloseWindow(modw); usergadflags[side][num]=0; if (modgads[G_m_sendfiles] ->Flags & GFLG_SELECTED) usergadflags[side][num]+=UG_SENDFILES; if (modgads[G_m_readc] ->Flags & GFLG_SELECTED) usergadflags[side][num]+=UG_READC; if (modgads[G_m_reado] ->Flags & GFLG_SELECTED) usergadflags[side][num]+=UG_READO; if (modgads[G_m_cdc] ->Flags & GFLG_SELECTED) usergadflags[side][num]+=UG_CDC; if (modgads[G_m_cdo] ->Flags & GFLG_SELECTED) usergadflags[side][num]+=UG_CDO; if (modgads[G_m_modify] ->Flags & GFLG_SELECTED) usergadflags[side][num]+=UG_MODIFY; if (modgads[G_m_asynch] ->Flags & GFLG_SELECTED) usergadflags[side][num]+=UG_ASYNCH; if (modgads[G_m_shuffle] ->Flags & GFLG_SELECTED) usergadflags[side][num]+=UG_SHUFFLE; strcpy(usergadnames[side][num],((struct StringInfo *)modgads[G_m_gadname]->SpecialInfo)->Buffer); strcpy(usergadactual[side][num],((struct StringInfo *)modgads[G_m_command]->SpecialInfo)->Buffer); } FreeGadgets(modglist); } return(done); /* done will be false if window didnt open or cadgets weren't created. */ } struct Gadget *createCfgGadgets(struct Gadget **glistptr, void *vi, UWORD topborder, struct Gadget *gads[]) { struct NewGadget ng; struct Gadget *gad; #ifdef DEBUG puts("createCfgGadgets()"); #endif gad = CreateContext(glistptr); ng.ng_LeftEdge = 5; ng.ng_TopEdge = 1+topborder; ng.ng_Width = 8; ng.ng_Height = 10; ng.ng_TextAttr = &ScreenFontAttr; ng.ng_VisualInfo = vi; ng.ng_Flags = PLACETEXT_RIGHT; ng.ng_GadgetID = G_Cdelverify; ng.ng_GadgetText = "Delete Verify"; gads[G_Cdelverify] = gad = CreateGadget(CHECKBOX_KIND, gad, &ng, GTCB_Checked,deleteverify, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetID = G_Cignorehiddenbit; ng.ng_GadgetText = "Ignore Hidden Bit"; gads[G_Cignorehiddenbit] = gad = CreateGadget(CHECKBOX_KIND, gad, &ng, GTCB_Checked,ignorehiddenbit, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetID = G_Csetprotverify; ng.ng_GadgetText = "Set Protection Verify"; gads[G_Csetprotverify] = gad = CreateGadget(CHECKBOX_KIND, gad, &ng, GTCB_Checked,setprotverify, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetID = G_Cignoreinserteddisks; ng.ng_GadgetText = "Ignore Disk Insert"; gads[G_Cignoreinserteddisks] = gad = CreateGadget(CHECKBOX_KIND, gad, &ng, GTCB_Checked,ignoreinserteddisks, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetID = G_Cmixfilesanddraws; ng.ng_GadgetText = "Mix Files and Dirs"; gads[G_Cmixfilesanddraws] = gad = CreateGadget(CHECKBOX_KIND, gad, &ng, GTCB_Checked,mixfilesanddraws, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetID = G_Cautooverwrite; ng.ng_GadgetText = "Auto Overwrite"; gads[G_Cautooverwrite] = gad = CreateGadget(CHECKBOX_KIND, gad, &ng, GTCB_Checked,autooverwrite, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetID = G_Cnomessages; ng.ng_GadgetText = "No Command Error Msg's"; gads[G_Cnomessages] = gad = CreateGadget(CHECKBOX_KIND, gad, &ng, GTCB_Checked,nomessages, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetID = G_Cignorenodisk; ng.ng_GadgetText = "Ignore No Disk In Drive"; gads[G_Cignorenodisk] = gad = CreateGadget(CHECKBOX_KIND, gad, &ng, GTCB_Checked,ignorenodisk, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Shuffle Screens on command"; ng.ng_GadgetID = G_Cshufflescreens; gads[G_Cshufflescreens] = gad = CreateGadget(CHECKBOX_KIND, gad, &ng, GTCB_Checked,shufflescreens, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Use Workbench Screen"; ng.ng_GadgetID = G_Cuseworkbenchscreen; gads[G_Cuseworkbenchscreen] = gad = CreateGadget(CHECKBOX_KIND, gad, &ng, GTCB_Checked,useworkbenchscreen, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_Height += 2; ng.ng_Width = CFG_STRGAD_WIDTH; ng.ng_GadgetText = "Screen Mode"; ng.ng_GadgetID = G_Cpickscreen; ng.ng_Flags = NG_HIGHLABEL|PLACETEXT_IN; gads[G_Cpickscreen] = gad = CreateGadget(BUTTON_KIND, gad, &ng,TAG_END); ng.ng_Flags = PLACETEXT_RIGHT; /* reset this cos changed for screenmode button*/ ng.ng_TopEdge += ng.ng_Height+2; ng.ng_Width = 50; ng.ng_Height = 15; ng.ng_GadgetText = "File Colour"; ng.ng_GadgetID = G_Cfilecol; gads[G_Cfilecol] = gad = CreateGadget(PALETTE_KIND, gad, &ng, GTPA_Color, filecol, GTPA_Depth, mysc->RastPort.BitMap->Depth, GTPA_IndicatorWidth, 50, GTPA_ColorOffset , 0, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Dir Colour"; ng.ng_GadgetID = G_Cdircol; gads[G_Cdircol] = gad = CreateGadget(PALETTE_KIND, gad, &ng, GTPA_Color, dircol, GTPA_Depth, mysc->RastPort.BitMap->Depth, GTPA_IndicatorWidth, 50, GTPA_ColorOffset , 0, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Highlight"; ng.ng_GadgetID = G_Chighlightcol; gads[G_Chighlightcol] = gad = CreateGadget(PALETTE_KIND, gad, &ng, GTPA_Color, highlightcol, GTPA_Depth, mysc->RastPort.BitMap->Depth, GTPA_IndicatorWidth, 60, GTPA_ColorOffset , 0, TAG_END); ng.ng_LeftEdge = 250; ng.ng_TopEdge = 1+topborder; ng.ng_Width = CFG_STRGAD_WIDTH; ng.ng_Height = 14; ng.ng_GadgetText = "View"; ng.ng_GadgetID = G_Cview; gads[G_Cview] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, CommandString[C_View], GTST_MaxChars, MAX_COMMAND_LEN, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Read"; ng.ng_GadgetID = G_Cread; gads[G_Cread] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, CommandString[C_Read], GTST_MaxChars, MAX_COMMAND_LEN, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Edit"; ng.ng_GadgetID = G_Cedit; gads[G_Cedit] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, CommandString[C_Edit], GTST_MaxChars, MAX_COMMAND_LEN, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Hear"; ng.ng_GadgetID = G_Chear; gads[G_Chear] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, CommandString[C_Hear], GTST_MaxChars, MAX_COMMAND_LEN, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Execute"; ng.ng_GadgetID = G_Cexecute; gads[G_Cexecute] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, CommandString[C_Execute], GTST_MaxChars, MAX_COMMAND_LEN, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Archiver"; ng.ng_GadgetID = G_Carchive; gads[G_Carchive] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, CommandString[C_Archive], GTST_MaxChars, MAX_COMMAND_LEN, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Un-Archiver"; ng.ng_GadgetID = G_Cunarc; gads[G_Cunarc] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, CommandString[C_Unarc], GTST_MaxChars, MAX_COMMAND_LEN, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Console Window"; ng.ng_GadgetID = G_Coutputcon; gads[G_Coutputcon] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, outputcon, GTST_MaxChars, MAX_PATH_LEN, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Draw Icon File"; ng.ng_GadgetID = G_Cdefaulticonfile; gads[G_Cdefaulticonfile] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, defaulticonfile, GTST_MaxChars, MAX_PATH_LEN, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Requester Message"; ng.ng_GadgetID = G_Ccancelcontmsg; gads[G_Ccancelcontmsg] = gad = CreateGadget(STRING_KIND, gad, &ng, GTST_String, cancelcontmsg, GTST_MaxChars, MAX_CANCELCONTMSG_LEN, TAG_END); ng.ng_TopEdge += ng.ng_Height+2; ng.ng_GadgetText = "Lines per side"; ng.ng_GadgetID = G_Clines; gads[G_Clines] = gad = CreateGadget(INTEGER_KIND, gad, &ng, GTIN_Number, lines_per_side, GTIN_MaxChars, 3, TAG_END); return(gad); } struct Window *OpenCfgWindow(void) { #ifdef DEBUG puts("OpenCfgWindow()"); #endif return(OpenWindowTags(NULL, WA_Left,W->LeftEdge+CFGLEFT, WA_Top,W->TopEdge+CFGTOP, WA_Width,CFGWIDTH, WA_Height,CFGHEIGHT, WA_MinWidth,CFGWIDTH, WA_MinHeight,CFGHEIGHT, WA_InnerHeight,CFGINHEIGHT, WA_AutoAdjust, FALSE, WA_DragBar, TRUE, WA_DepthGadget, TRUE, WA_Activate, TRUE, WA_CloseGadget, TRUE, WA_SimpleRefresh, FALSE, WA_IDCMP, PALETTEIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_MENUPICK, WA_Title,"AFCOPY Configuration", WA_NewLookMenus, TRUE, WA_PubScreen, mysc, WA_Gadgets,cfgglist, WA_ScreenTitle,screentitle, TAG_END)); } BOOL EditConfig( void ) { struct IntuiMessage *imsg; BOOL done=FALSE; struct Gadget *gad; if (createCfgGadgets(&cfgglist, vi, topborder,cfggads)) { if ((cfgw=OpenCfgWindow())) { if (CfgMenu = CreateMenus( CfgNewMenu, GTMN_NewLookMenus,TRUE, TAG_DONE)) { LayoutMenus(CfgMenu,vi,GTMN_TextAttr, &ScreenFontAttr, GTMN_NewLookMenus,TRUE,TAG_DONE); SetMenuStrip(cfgw,CfgMenu); SetFont(cfgw->RPort,ScreenFont); SetAPen(cfgw->RPort,2); do { Wait (1 << cfgw->UserPort->mp_SigBit); if ((imsg = GT_GetIMsg(cfgw->UserPort))) { if (imsg->Class == IDCMP_CLOSEWINDOW) { done=TRUE; } if (imsg->Class == IDCMP_MENUPICK) { switch (MENUNUM(imsg->Code)) { case 0: case 1: if (rtGetString (devicegadnames[MENUNUM(imsg->Code)][ITEMNUM(imsg->Code)], MAX_DEV_GAD_NAME_LEN, "Enter Device Gadget Name", NULL,RT_Window,W, TAG_END)) { rtGetString (devicegadactual[MENUNUM(imsg->Code)][ITEMNUM(imsg->Code)], MAX_DEV_GAD_ACTUAL_LEN, "Enter Actual Device Name", NULL,RT_Window,W, TAG_END); } break; case 2: case 3: ModGadget(MENUNUM(imsg->Code)-2,ITEMNUM(imsg->Code)); break; case 4: /* misc */ switch (ITEMNUM(imsg->Code)) { case 0: /* pick font! */ do { CloseFont(ScreenFont); PickFont(); } while (GetFont()==0); break; } break; } } if (imsg->Class == IDCMP_GADGETUP) { gad = (struct Gadget *)imsg->IAddress; switch (gad->GadgetID) { case G_Cfilecol: filecol=imsg->Code; break; case G_Cdircol: dircol=imsg->Code; break; case G_Chighlightcol: highlightcol=imsg->Code; break; case G_Cpickscreen: pickscreen(); GT_SetGadgetAttrs(cfggads[G_Cuseworkbenchscreen],cfgw,NULL, GTCB_Checked,useworkbenchscreen, TAG_END); break; } } GT_ReplyIMsg(imsg); } } while (!done); ClearMenuStrip(cfgw); FreeMenus(CfgMenu); } CloseWindow(cfgw); if (cfggads[G_Cdelverify] ->Flags & GFLG_SELECTED) deleteverify=TRUE; else deleteverify=FALSE; if (cfggads[G_Csetprotverify] ->Flags & GFLG_SELECTED) setprotverify=TRUE; else setprotverify=FALSE; if (cfggads[G_Cignorehiddenbit] ->Flags & GFLG_SELECTED) ignorehiddenbit=TRUE; else ignorehiddenbit=FALSE; if (cfggads[G_Cignoreinserteddisks] ->Flags & GFLG_SELECTED) ignoreinserteddisks=TRUE; else ignoreinserteddisks=FALSE; if (cfggads[G_Cmixfilesanddraws] ->Flags & GFLG_SELECTED) mixfilesanddraws=TRUE; else mixfilesanddraws=FALSE; if (cfggads[G_Cautooverwrite] ->Flags & GFLG_SELECTED) autooverwrite=TRUE; else autooverwrite=FALSE; if (cfggads[G_Cnomessages] ->Flags & GFLG_SELECTED) nomessages=TRUE; else nomessages=FALSE; if (cfggads[G_Cignorenodisk] ->Flags & GFLG_SELECTED) ignorenodisk=TRUE; else ignorenodisk=FALSE; if (cfggads[G_Cuseworkbenchscreen] ->Flags & GFLG_SELECTED) useworkbenchscreen=TRUE; else useworkbenchscreen=FALSE; if (cfggads[G_Cshufflescreens] ->Flags & GFLG_SELECTED) shufflescreens=TRUE; else shufflescreens=FALSE; strcpy(defaulticonfile,((struct StringInfo *)cfggads[G_Cdefaulticonfile]->SpecialInfo)->Buffer); strcpy(outputcon,((struct StringInfo *)cfggads[G_Coutputcon]->SpecialInfo)->Buffer); strcpy(cancelcontmsg,((struct StringInfo *)cfggads[G_Ccancelcontmsg]->SpecialInfo)->Buffer); strcpy(CommandString[C_View],((struct StringInfo *)cfggads[G_Cview]->SpecialInfo)->Buffer); strcpy(CommandString[C_Read],((struct StringInfo *)cfggads[G_Cread]->SpecialInfo)->Buffer); strcpy(CommandString[C_Edit],((struct StringInfo *)cfggads[G_Cedit]->SpecialInfo)->Buffer); strcpy(CommandString[C_Hear],((struct StringInfo *)cfggads[G_Chear]->SpecialInfo)->Buffer); strcpy(CommandString[C_Execute],((struct StringInfo *)cfggads[G_Cexecute]->SpecialInfo)->Buffer); strcpy(CommandString[C_Archive],((struct StringInfo *)cfggads[G_Carchive]->SpecialInfo)->Buffer); strcpy(CommandString[C_Unarc],((struct StringInfo *)cfggads[G_Cunarc]->SpecialInfo)->Buffer); lines_per_side=(( struct StringInfo * )cfggads[G_Clines]->SpecialInfo )->LongInt; if (lines_per_side