home *** CD-ROM | disk | FTP | other *** search
- #include <exec/types.h>
- #include <exec/memory.h>
- #include <intuition/intuition.h>
- #include <graphics/gfxbase.h>
- #include <libraries/dosextens.h>
- #define ESC 0x1b
- #define FBSIZE (long)(sizeof (struct FileInfoBlock))
- #define MAXFILE 100
- #define MAXFNAME 9
- #define MAXCHAR 30
- #define MAXCD 255
- #define SLIDE_GADGET 0
- #define DSLIDE_GADGET 1
- #define ERR_GADGET 2
- #define EXECUTE_GADGET 3
- #define CURDIR_GADGET 4
- #define CPDIR_GADGET 5
- #define DF0_GADGET 6
- #define DF1_GADGET 7
- #define DF2_GADGET 8
- #define RAM_GADGET 9
- #define ALL_GADGET 10
- #define DH0_GADGET 11
- #define DH1_GADGET 12
- #define DH2_GADGET 13
- #define SWAP_GADGET 14
- #define CLEAR_GADGET 15
- #define DELETE_GADGET 16
- #define EDIT_GADGET 17
- #define FORMAT_GADGET 18
- #define DSKCPY_GADGET 19
- #define COPYALL_GADGET 20
- #define DELDIR_GADGET 21
- #define GETDIR_GADGET 22
- #define MAKEDIR_GADGET 23
- #define PARENT_GADGET 24
- #define ROOT_GADGET 25
- #define TYPE_GADGET 26
- #define HTYPE_GADGET 27
- #define PRINT_GADGET 28
- #define EXEC_GADGET 29
- #define RUN_GADGET 30
- #define COPY_GADGET 31
- #define MOVDEL_GADGET 32
- #define RENAME_GADGET 33
- #define GRENAM_GADGET 34
- #define MOVE_GADGET 35
- #define SINFO_GADGET 36
- #define DINFO_GADGET 37
- #define ARC_GADGET 38
- #define DEARC_GADGET 39
- #define ARCLIST_GADGET 40
- #define ALLWIND_GADGET 41
- #define CLRWIND_GADGET 42
- #define ALLDIRS_GADGET 43
- #define CLRDIRS_GADGET 44
- #define CPYDIRS_GADGET 45
- #define DELDIRS_GADGET 46
- #define BYTE_GADGET 47
- #define FILENOTE_GADGET 48
- #define SCRIPT_GADGET 49
- #define SHOW_GADGET 50
-
- #define BUT_FIRST DF0_GADGET
- #define FIRST_GADGET But_gad[SHOW_GADGET-6]
- #define KILL_E But_gad[EDIT_GADGET-6]
- #define KILL_SHOW But_gad[SHOW_GADGET-6]
- #define KILL_ARC But_gad[ARC_GADGET-6]
- #define KILL_DEARC But_gad[DEARC_GADGET-6]
- #define KILL_ARCLIST But_gad[ARCLIST_GADGET-6]
- #define KILL_COPYALL But_gad[COPYALL_GADGET-6]
- #define KILL_RUN But_gad[RUN_GADGET-6]
- #define KILL_EXECUTE But_gad[EXECUTE_GADGET-6]
- #define KILL_FORMAT But_gad[FORMAT_GADGET-6]
- #define KILL_DSKCPY But_gad[DSKCPY_GADGET-6]
- #define KILL_SCRIPT But_gad[SCRIPT_GADGET-6]
- #define KILL_CPYDIRS But_gad[CPYDIRS_GADGET-6]
- #define KILL_DELDIRS But_gad[DELDIRS_GADGET-6]
-
- #define BUT_LAST SHOW_GADGET
- #define WinIDCMP CLOSEWINDOW | REFRESHWINDOW | GADGETUP | MOUSEBUTTONS | SELECTDOWN
- #define WinIDCMPM CLOSEWINDOW | REFRESHWINDOW | GADGETUP | MOUSEBUTTONS | MOUSEMOVE | SELECTDOWN
- #define GADFLAGS NULL,5,174,53,6,GADGHCOMP|GADGHBOX,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,NULL,NULL,NULL,NULL,NULL
- #define GADTEXT 3,2,JAM2,0,0,NULL
- extern struct FileHandle *Open();
- extern APTR AllocMem();
- struct IntuitionBase *IntuitionBase;
- struct GfxBase *GfxBase;
- struct IntuiMessage *message;
- struct RastPort *rp;
- struct Window *w;
- BOOL MOUSEYES=TRUE;
- BOOL MOUSENO=FALSE;
- char ASTR[30];
- int DFfirst=1;
- char *CR = "\n\n";
- int status = 0;
- char *EP,*CDP,*SHOWP,*ARCP,*COPYP,*RUNP,*DISKCOPYP,*FORMATP,*EXECUTEP,
- *PLAYERP, *DELETEP, *ENDCLIP;
- char *RSHOW = "ram:DUC/Show";
- char *RRUN = "ram:DUC/Run";
- char *RDISKCOPY = "ram:DUC/Diskcopy";
- char *RFORMAT = "ram:DUC/Format";
- char *REXECUTE = "ram:DUC/Execute";
- char *DE = "sys:c/E";
- char *DARC = "sys:c/Arc";
- char *DSHOW = "sys:c/Show";
- char *DCOPY = "sys:c/Copy";
- char *DRUN = "sys:c/Run";
- char *DDISKCOPY = "sys:system/Diskcopy";
- char *DCD = "sys:c/Cd";
- char *DFORMAT = "sys:system/Format";
- char *DEXECUTE = "sys:c/Execute";
- char *DPLAYER = "sys:c/Player";
- char *DDELETE = "sys:c/Delete";
- char *DENDCLI = "sys:c/EndCLI";
- int gadgid; /*ID Code identifying which gadget*/
- /*Error Gadget string gadget*/
- USHORT str_pairs2[] = { 0,0, 639,0, 639,9, 0,9, 0,0,};
- struct Border str_border2 =
- {
- -1,-1,/*Leftedge, Topedge*/
- 1,1,JAM1,/*FrontPen, BackPen, Drawmode*/
- 5, /*Number of Pairs*/
- (APTR) &str_pairs2, /*XY, Pointer to XY pairs*/
- NULL,
- };
-
- /*Error display*/
- char err_buf[MAXCD+1];
- struct StringInfo err_str =
- { &err_buf, NULL, 0, MAXCD+1, 0, 0, 0, 0, 2,0, NULL, 0, NULL, };
-
- struct Gadget Err_gad =
- {
- NULL, /*last in the list of gadgets*/
- 30,1,
- 561,9,
- GADGHCOMP, GADGIMMEDIATE | RELVERIFY | STRINGCENTER,
- STRGADGET,
- (APTR) &str_border2,
- NULL,
- NULL, /*Intuitext pointer*/
- 0,&err_str,
- ERR_GADGET,
- NULL,
- };
-
- /*Source Destination string gadgets*/
- USHORT str_pairs[] = { 0,0, 280,0, 280,9, 0,9, 0,0,};
- struct Border CUR_str_border =
- {
- -1,-1,/*Leftedge, Topedge*/
- 3,1,JAM1,/*FrontPen, BackPen, Drawmode*/
- 5, /*Number of Pairs*/
- (APTR) &str_pairs, /*XY, Pointer to XY pairs*/
- NULL,
- };
- struct Border CP_str_border =
- {
- -1,-1,/*Leftedge, Topedge*/
- 1,1,JAM1,/*FrontPen, BackPen, Drawmode*/
- 5, /*Number of Pairs*/
- (APTR) &str_pairs, /*XY, Pointer to XY pairs*/
- NULL,
- };
- struct Border str_border =
- {
- -1,-1,/*Leftedge, Topedge*/
- 1,1,JAM1,/*FrontPen, BackPen, Drawmode*/
- 5, /*Number of Pairs*/
- (APTR) &str_pairs, /*XY, Pointer to XY pairs*/
- NULL,
- };
-
- /* Execute String Gadget */
- struct IntuiText Exe_text = {1,0,JAM1,283,0,NULL,"E",NULL,};
- char Exe_buf[MAXCD+1];
- struct StringInfo Exe_str =
- { &Exe_buf, NULL, 0, MAXCD+1, 0, 0, 0, 0, 2,0, NULL, 0, NULL, };
- struct Gadget Exe_gad =
- {
- &Err_gad,
- 345,141,
- 281,9,
- GADGHCOMP, GADGIMMEDIATE | RELVERIFY,
- STRGADGET,
- (APTR) &str_border,
- NULL,
- &Exe_text,
- 0,
- &Exe_str,
- EXECUTE_GADGET,
- NULL,
- };
-
- struct IntuiText Curdir_text = {3,0,JAM1,283,0,NULL," ",NULL,};
- char cd_buf[MAXCD+1];
- struct StringInfo Curdir_str =
- { &cd_buf, NULL, 0, MAXCD+1, 0, 0, 0, 0, 2,0, NULL, 0, NULL, };
- struct Gadget Curdir_gad =
- {
- &Exe_gad,
- 345,151,
- 278,9,
- GADGHCOMP, GADGIMMEDIATE | RELVERIFY,
- STRGADGET,
- (APTR) &CUR_str_border,
- NULL,
- &Curdir_text,
- 0,
- &Curdir_str,
- CURDIR_GADGET,
- NULL,
- };
-
- /*Destination definitions*/
- char cp_buf[MAXCD+1];
- struct IntuiText Cpdir_text = {1,0,JAM1,283,0,NULL," ",NULL,};
- struct StringInfo Cpdir_str =
- { &cp_buf, NULL, 0, MAXCD+1, 0, 0, 0, 0, 2,0, NULL, 0, NULL, };
-
- struct Gadget Cpdir_gad =
- {
- &Curdir_gad,
- 345,161,
- 278,9,
- GADGHCOMP, GADGIMMEDIATE | RELVERIFY,
- STRGADGET,
- (APTR) &CP_str_border,
- NULL,
- &Cpdir_text,
- 0,
- &Cpdir_str,
- CPDIR_GADGET,
- NULL,
- };
- struct Gadget *CD;
- /*File Select Gadget Declarations*/
- struct Image Dslide_img;
- struct PropInfo Dslide_prop;
- struct Gadget DSlide_gad =
- {
- &Cpdir_gad, /*Next gadget*/
- 322,95, /*Left, Top edge*/
- 20,75, /*Width Height*/
- GADGHNONE, /*Flags*/
- GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE,
- PROPGADGET, /*Gadget type*/
- (APTR)&Dslide_img, /*Border definition*/
- NULL, /*Select render*/
- NULL, /*Gadget text*/
- 0, /*MutualExclude*/
- (APTR) &Dslide_prop, /*Special Info - proportional specification*/
- DSLIDE_GADGET,
- NULL,
- };
- struct Gadget *SL;
-
- /*File Select Gadget Declarations*/
- struct Image slide_img;
- struct PropInfo slide_prop;
- struct Gadget Slide_gad =
- {
- &DSlide_gad, /*Next gadget*/
- 322,12, /*Left, Top edge*/
- 20,75, /*Width Height*/
- GADGHNONE, /*Flags*/
- GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE,
- PROPGADGET, /*Gadget type*/
- (APTR)&slide_img, /*Border definition*/
- NULL, /*Select render*/
- NULL, /*Gadget text*/
- 0, /*MutualExclude*/
- (APTR) &slide_prop, /*Special Info - proportional specification*/
- SLIDE_GADGET,
- NULL,
- };
-
- /*Button Gadget IDs*/
-
- struct IntuiText But_text[] =
- {
- GADTEXT," DF0: ",NULL,
- GADTEXT," DF1: ",NULL,
- GADTEXT," DF2: ",NULL,
- GADTEXT," RAM: ",NULL,
- GADTEXT," ALL ",NULL,
- GADTEXT," DH0: ",NULL,
- GADTEXT," DH1: ",NULL,
- GADTEXT," DH2: ",NULL,
- GADTEXT," SWAP ",NULL,
- GADTEXT," CLEAR ",NULL,
- GADTEXT,"DELETE ",NULL,
- GADTEXT," EDIT ",NULL,
- GADTEXT,"FORMAT ",NULL,
- GADTEXT,"DSKCPY ",NULL,
- GADTEXT,"COPYALL",NULL,
- GADTEXT,"DELDIR ",NULL,
- GADTEXT,"GETDIR ",NULL,
- GADTEXT," MKDIR ",NULL,
- GADTEXT,"PARENT ",NULL,
- GADTEXT," ROOT ",NULL,
- GADTEXT," TYPE ",NULL,
- GADTEXT," HTYPE ",NULL,
- GADTEXT," PRINT ",NULL,
- GADTEXT," EXEC ",NULL,
- GADTEXT," RUN ",NULL,
- GADTEXT," COPY ",NULL,
- GADTEXT,"MOVDEL ",NULL,
- GADTEXT,"RENAME ",NULL,
- GADTEXT,"GRENAM ",NULL,
- GADTEXT," MOVE ",NULL,
- GADTEXT," SINFO ",NULL,
- GADTEXT," DINFO ",NULL,
- GADTEXT," ARC ",NULL,
- GADTEXT,"DE-ARC ",NULL,
- GADTEXT,"A-LIST ",NULL,
- GADTEXT,"ALLWIND",NULL,
- GADTEXT,"CLRWIND",NULL,
- GADTEXT,"ALLDIRS",NULL,
- GADTEXT,"CLRDIRS",NULL,
- GADTEXT,"CPYDIRS",NULL,
- GADTEXT,"DELDIRS",NULL,
- GADTEXT," BYTE ",NULL,
- GADTEXT,"FILNOTE",NULL,
- GADTEXT,"SCRIPT ",NULL,
- GADTEXT," SHOW ",NULL,
- };
-
- struct Gadget But_gad[] =
- {
- GADFLAGS,DF0_GADGET,NULL,
- GADFLAGS,DF1_GADGET,NULL,
- GADFLAGS,DF2_GADGET,NULL,
- GADFLAGS,RAM_GADGET,NULL,
- GADFLAGS,ALL_GADGET,NULL,
- GADFLAGS,DH0_GADGET,NULL,
- GADFLAGS,DH1_GADGET,NULL,
- GADFLAGS,DH2_GADGET,NULL,
- GADFLAGS,SWAP_GADGET,NULL,
- GADFLAGS,CLEAR_GADGET,NULL,
- GADFLAGS,DELETE_GADGET,NULL,
- GADFLAGS,EDIT_GADGET,NULL,
- GADFLAGS,FORMAT_GADGET,NULL,
- GADFLAGS,DSKCPY_GADGET,NULL,
- GADFLAGS,COPYALL_GADGET,NULL,
- GADFLAGS,DELDIR_GADGET,NULL,
- GADFLAGS,GETDIR_GADGET,NULL,
- GADFLAGS,MAKEDIR_GADGET,NULL,
- GADFLAGS,PARENT_GADGET,NULL,
- GADFLAGS,ROOT_GADGET,NULL,
- GADFLAGS,TYPE_GADGET,NULL,
- GADFLAGS,HTYPE_GADGET,NULL,
- GADFLAGS,PRINT_GADGET,NULL,
- GADFLAGS,EXEC_GADGET,NULL,
- GADFLAGS,RUN_GADGET,NULL,
- GADFLAGS,COPY_GADGET,NULL,
- GADFLAGS,MOVDEL_GADGET,NULL,
- GADFLAGS,RENAME_GADGET,NULL,
- GADFLAGS,GRENAM_GADGET,NULL,
- GADFLAGS,MOVE_GADGET,NULL,
- GADFLAGS,SINFO_GADGET,NULL,
- GADFLAGS,DINFO_GADGET,NULL,
- GADFLAGS,ARC_GADGET,NULL,
- GADFLAGS,DEARC_GADGET,NULL,
- GADFLAGS,ARCLIST_GADGET,NULL,
- GADFLAGS,ALLWIND_GADGET,NULL,
- GADFLAGS,CLRWIND_GADGET,NULL,
- GADFLAGS,ALLDIRS_GADGET,NULL,
- GADFLAGS,CLRDIRS_GADGET,NULL,
- GADFLAGS,CPYDIRS_GADGET,NULL,
- GADFLAGS,DELDIRS_GADGET,NULL,
- GADFLAGS,BYTE_GADGET,NULL,
- GADFLAGS,FILENOTE_GADGET,NULL,
- GADFLAGS,SCRIPT_GADGET,NULL,
- GADFLAGS,SHOW_GADGET,NULL,
- };
-
- /*BORDER DEFINITION FOR SOURCE FILE SELECT AREA*/
- USHORT Fil_pairs[] = { 10,13, 321,13, 321,87, 10,87, 10,13,};
- struct Border Fil_border =
- {
- -1,-1, /*Leftedge, Topedge*/
- 1,0,JAM1, /*FrontPen, BackPen, Drawmode*/
- 5, /*Number of Pairs*/
- (APTR) Fil_pairs, /*XY, Pointer to XY pairs*/
- NULL, /*More borders*/
- };
- /*BORDER DEFINITION FOR DESTINATION FILE SELECT AREA*/
- USHORT DFil_pairs[] = { 10,96, 321,96, 321,170, 10,170, 10,96,};
- struct Border DFil_border =
- {
- -1,-1, /*Leftedge, Topedge*/
- 1,0,JAM1, /*FrontPen, BackPen, Drawmode*/
- 5, /*Number of Pairs*/
- (APTR) DFil_pairs, /*XY, Pointer to XY pairs*/
- NULL, /*More borders*/
- };
-
-
- struct NewWindow nw =
- {
- 0,0,
- 640,172,
- 0,1, /*Detail, block pens*/
- WinIDCMP, /*IDCMP flags*/
- WINDOWSIZING | WINDOWDEPTH | WINDOWDRAG | REPORTMOUSE | WINDOWCLOSE
- | ACTIVATE | RMBTRAP | SMART_REFRESH,
- &FIRST_GADGET, /*First gadget in the list*/
- NULL, /*User checkmark*/
- " DirUtil X VERSION 5.00 ",
- NULL,
- NULL, /*Pointer to superbitmap*/
- 100,40,640,172, /*Now sizeable*/
- WBENCHSCREEN,
- };
-
- /*The following structure is used to hold the SOURCE directory entries*/
- struct DT
- {
- char dt_fname[MAXCHAR];/*File name*/
- short dt_select; /*Select flag*/
- short dt_dir; /*Directory flag*/
- long dt_size; /*File size*/
- };
-
- struct DT SDT[MAXFILE+1];
- struct DT DDT[MAXFILE+1];
- struct DT *CDT, *CDTT;
- struct DT *CDT1;
-
- struct InfoData *InfoData;
- struct FileLock *InitialCurrentDirLock, *CurrentDirLock, *SHOWLOCK,
- *ARCLOCK, *ELOCK,*DISKCOPYLOCK,*COPYLOCK,*CDLOCK,*RUNLOCK,
- *FORMATLOCK,*EXECUTELOCK,*PLAYERLOCK,*SCRIPTLOCK,
- *LIBLOCK,*LIBCLOCK,*RAMLOCK,*LOCK, *RAMCLOCK,*ASSIGNLOCK,
- *ENDCLILOCK, *DELETELOCK, *fl;
- struct FileLock *RDISKCOPYLOCK, *RRUNLOCK,*RFORMATLOCK,*REXECUTELOCK,
- *RASSIGNLOCK, *RSHOWLOCK;
- struct FileHandle *window = NULL; /*file handle for type & print*/
- struct FileHandle *workfp = NULL; /*file handle to file to be displayed*/
- long bytes;
- ULONG MessageClass;
- USHORT code;
- int Sfiles,Dfiles;
- int ac;
- int Snumdir,Dnumdir;
- int Scur_index,Dcur_index;
- int *numdir,file,pmode;
- int lenn = 1;
- char *cpdbuf;
- char *ptr5;
- int files;
- int *cur_index;
- int NILFD = 0;
- int linecount;
- unsigned int index;
- int err,done = FALSE,DEL = 1,wind_start, dirflag;
- char cpdir[MAXCD+1];
- char curdir[MAXCD+1],requestedsd[MAXCD+1],requesteddd[MAXCD+1];
- char command[300];
- char *DIR;
- char *requestedcd;
- unsigned char buffer[80];
- unsigned char buf[512];
- unsigned char blank[37] = " ";
- void Print_to_printer(), copy(), new_dir(),
- sel_file(), par_dir(), Print_to_screen(), Hprint_to_screen(),
- MyOpen(), DoHex(), MyDone(), WaitSpace(), DoHeader(), MyClose();
- struct FileLock *oldlock;
-
- main(argc,argv)
- char *argv[];
- {
- struct Gadget *gad_ptr;
- struct IntuiText *text_ptr;
- register i;
- ac = argc;
- EP = DE;
- SHOWP = RSHOW;
- ARCP = DARC;
- COPYP = DCOPY;
- RUNP = RRUN;
- DISKCOPYP = RDISKCOPY;
- FORMATP = RFORMAT;
- EXECUTEP = REXECUTE;
- CDP = DCD;
- PLAYERP = DPLAYER;
- DELETEP = DDELETE;
- ENDCLIP = DENDCLI;
- SHOWLOCK = Lock(DSHOW,ACCESS_READ); /* Check to see if they exist */
- ARCLOCK = Lock(DARC,ACCESS_READ);
- ELOCK = Lock(DE,ACCESS_READ);
- CDLOCK = Lock(DCD,ACCESS_READ);
- COPYLOCK = Lock(DCOPY,ACCESS_READ);
- RUNLOCK = Lock(DRUN,ACCESS_READ);
- DISKCOPYLOCK = Lock(DDISKCOPY,ACCESS_READ);
- FORMATLOCK = Lock(DFORMAT,ACCESS_READ);
- EXECUTELOCK = Lock(DEXECUTE,ACCESS_READ);
- PLAYERLOCK = Lock(DPLAYER,ACCESS_READ);
- DELETELOCK = Lock(DDELETE,ACCESS_READ);
- ENDCLILOCK = Lock(DENDCLI,ACCESS_READ);
- RAMCLOCK = Lock("ram:DUC",ACCESS_READ);
- LIBLOCK = Lock("ram:libs",ACCESS_READ);
- LIBCLOCK = Lock("sys:libs/icon.library",ACCESS_READ);
- ASSIGNLOCK = Lock("sys:c/Assign",ACCESS_READ);
- if(!EXECUTELOCK) {
- puts("Execute COMMAND MUST BE IN SYS c\n");
- close_things();
- exit();
- }
- if(!ASSIGNLOCK) {
- puts("Assign COMMAND MUST BE IN SYS c\n");
- close_things();
- exit();
- }
- if(RAMCLOCK) {UnLock(RAMCLOCK);}
- else
- if (!(RAMCLOCK = CreateDir("ram:DUC",ACCESS_READ))) { }
- else UnLock(RAMCLOCK);
- if((DISKCOPYLOCK)&&(ASSIGNLOCK)&&(RUNLOCK)&&(LIBCLOCK))
- {
- if(LIBLOCK) {UnLock(LIBLOCK);}
- else
- if (!(LIBLOCK = CreateDir("ram:libs",ACCESS_READ))) { }
- else UnLock(LIBLOCK);
- if(DISKCOPYLOCK){
- copy("sys:system/Diskcopy","ram:DUC");
- DISKCOPYP = RDISKCOPY;
- }
- if(LIBCLOCK){
- copy ("sys:libs/icon.library", "ram:libs");
- sprintf(command, "%s","Assign libs: ram:libs");
- Execute(command,0,0);
- }
- if(RUNLOCK){
- copy ("sys:c/Run","ram:DUC");
- RUNP = RRUN;
- }
- if(ASSIGNLOCK){
- copy ("sys:c/Assign", "ram:DUC");
- }
- }
- if(FORMATLOCK){
- copy("sys:system/Format","ram:DUC");
- FORMATP = RFORMAT;
- }
- if(SHOWLOCK){
- copy("sys:c/Show","ram:DUC");
- SHOWP = RSHOW;
- }
- /*create cariage return file */
- file = creat("ram:CRT",pmode);
- status = write(file,CR,lenn);
- status = write(file,CR,lenn);
- status = close(file);
-
- *cp_buf = 0;
- *cd_buf = 0;
- strcpy(curdir,"sys:");
- strcpy(cpdir,"ram:");
-
- strcpy(requestedsd,curdir);
- strcpy(requesteddd,cpdir);
- if(!(CurrentDirLock = Lock(curdir,ACCESS_READ))) {
- if (ac == 2) puts("Could not lock DF0: disk!\n");
- close_things(); exit();
- }
- InitialCurrentDirLock = CurrentDir(CurrentDirLock);
-
- /*Gadget initialization*/
- slide_prop.Flags = FREEVERT | AUTOKNOB;
- slide_prop.VertBody = 0;
- slide_prop.VertPot = 0x8000;
-
- /*Gadget initialization*/
- Dslide_prop.Flags = FREEVERT | AUTOKNOB;
- Dslide_prop.VertBody = 0;
- Dslide_prop.VertPot = 0x8000;
-
- /*Setup the button gadgets*/
- for (i=0;i<(BUT_LAST-BUT_FIRST)+1;i++) {
- gad_ptr = &But_gad[i];
- text_ptr = &But_text[i];
-
- gad_ptr->LeftEdge = ((i%5) * 58) + 347;
- gad_ptr->TopEdge = ((i/5) * 11) + 12;
-
- if(i)
- gad_ptr->NextGadget = &But_gad[i-1];
- else
- gad_ptr->NextGadget = &Slide_gad;
- gad_ptr->GadgetText = text_ptr;
- text_ptr->LeftEdge = 0;
- text_ptr->TopEdge = 0;
- }
- GfxBase = (struct GfxBase *) OpenLibrary("graphics.library",0);
-
- IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library",0);
-
- if (!(w = (struct Window *) OpenWindow(&nw) )) {
- if (ac == 2) puts("Could not open window\n");
- close_things();
- exit();
- }
- ReportMouse(MOUSENO,&nw);
-
- rp = w->RPort;
- DrawBorder(rp,&Fil_border,0,0);
- DrawBorder(rp,&DFil_border,0,0);
- dirflag = 1;
- set_point();
- getdir(cpdir);
- new_dir();
- dirflag = 0;
- set_point();
- getdir(curdir);
- new_dir();
-
- display_error("Status: O.K.",0);
- RefreshGadgets(&FIRST_GADGET,w,NULL);
- if(!ARCLOCK) OffGadget(&KILL_ARC,w,NULL);
- if(!ARCLOCK) OffGadget(&KILL_DEARC,w,NULL);
- if(!ARCLOCK) OffGadget(&KILL_ARCLIST,w,NULL);
- if(!SHOWLOCK) OffGadget(&KILL_SHOW,w,NULL);
- if(!CDLOCK) OffGadget(&KILL_COPYALL,w,NULL);
- if(!COPYLOCK) OffGadget(&KILL_COPYALL,w,NULL);
- if(!COPYLOCK) OffGadget(&KILL_CPYDIRS,w,NULL);
- if(!DELETELOCK) OffGadget(&KILL_DELDIRS,w,NULL);
- if(!PLAYERLOCK) OffGadget(&KILL_SCRIPT,w,NULL);
- if(!RUNLOCK) OffGadget(&KILL_RUN,w,NULL);
- if(!EXECUTELOCK) OffGadget(&KILL_EXECUTE,w,NULL);
- if(!DISKCOPYLOCK) OffGadget(&KILL_DSKCPY,w,NULL);
- if(!ASSIGNLOCK) OffGadget(&KILL_DSKCPY,w,NULL);
- if(!RUNLOCK) OffGadget(&KILL_DSKCPY,w,NULL);
- if(!FORMATLOCK) OffGadget(&KILL_FORMAT,w,NULL);
- if(!ELOCK) OffGadget(&KILL_E,w,NULL);
- ModifyIDCMP(w,WinIDCMP);
- for (;;) {
- WaitPort(w->UserPort);
- message = (struct IntuiMessage *) GetMsg(w->UserPort);
- MessageClass = message->Class;
- code = message->Code;
- ReplyMsg(message);
- switch (MessageClass) {
- case GADGETDOWN:
- display_error("Status: O.K.",0);
- do_gadgets(message,w);
- break;
-
- case REFRESHWINDOW:
- BeginRefresh(w); EndRefresh(w);
- dis_files(*cur_index);
- DrawBorder(rp,&Fil_border,0,0);
- DrawBorder(rp,&DFil_border,0,0);
- break;
-
- case CLOSEWINDOW:
- close_things(); exit();
- break;
-
- case MOUSEBUTTONS:
- if (code == SELECTDOWN) {sel_file();
- DEL = 1;
- display_error("Status: O.K.",0);}
- break;
- case MOUSEMOVE:
- case GADGETUP:
- break;
- default:
- break;
- } /*end switch*/
- } /*end for*/
- }
-
- Info2(ddir)
- char *ddir;
- {
- InfoData = AllocMem(sizeof(struct InfoData),0);
- fl = Lock(ddir,ACCESS_READ);
- Info(fl,InfoData);
- sprintf(command,"%d Usable Bytes Free",((InfoData->id_NumBlocks - InfoData->id_NumBlocksUsed - 2) <= 0) ? 0 : ((InfoData->id_NumBlocks - InfoData->id_NumBlocksUsed - 2) * InfoData->id_BytesPerBlock));
- display_error(command,0);
- FreeMem(InfoData,sizeof(struct InfoData));
- UnLock(fl);
- }
-
- do_gadgets(mes,win)
- struct IntuiMessage *mes;
- struct Window *win;
- {
- struct FileLock *MakeDirLock;
- struct Gadget *igad;
- unsigned short i;
- int jj;
- igad = (struct Gadget *) mes->IAddress;
- if((DFfirst==0)&&(gadgid!=FORMAT_GADGET)&&
- (gadgid!=DSKCPY_GADGET)){DFfirst =1;
- display_error("Status: O.K.",0);
- if(ASSIGNLOCK){
- sprintf(command, "%s","Assign c: sys:c");
- Execute(command,0,0);}
- }
- gadgid = igad->GadgetID;
- if((DEL==0) && (DELETE_GADGET != gadgid) && (DELDIR_GADGET != gadgid)
- && (DELDIRS_GADGET != gadgid))
- {DEL = 1;
- display_error("Status: O.K.",0);}
- switch (gadgid) {
- case CURDIR_GADGET:
- dirflag = 0;
- set_point();
- ModifyIDCMP(w,0);
- nullterm(cd_buf,MAXCD);
- Curdir_str.NumChars = strlen(cd_buf);
- Curdir_str.BufferPos = strlen(cd_buf);
- getdir(cd_buf);
- new_dir();
- ModifyIDCMP(w,WinIDCMP);
- break;
- case CPDIR_GADGET:
- dirflag = 1;
- set_point();
- ModifyIDCMP(w,0);
- nullterm(cp_buf,MAXCD);
- Cpdir_str.NumChars = strlen(cp_buf);
- Cpdir_str.BufferPos = strlen(cp_buf);
- getdir(cp_buf);
- new_dir();
- ModifyIDCMP(w,WinIDCMP);
- break;
- case EXECUTE_GADGET:
- nullterm(Exe_buf,MAXCD);
- Exe_str.NumChars = strlen(Exe_buf);
- Exe_str.BufferPos = strlen(Exe_buf);
- break;
- case SLIDE_GADGET:
- ModifyIDCMP(w,WinIDCMPM);
- if((message->MouseY>=95)&&(message->MouseY<=170)) gadgid = DSLIDE_GADGET;
- else{
- dirflag = 0;
- set_point();
- jj=11;
- do{
- do{
- ReportMouse(MOUSEYES,&nw);
- WaitPort(w->UserPort);
- message = (struct IntuiMessage *) GetMsg(w->UserPort);
- MessageClass = message->Class;
- ReplyMsg(message);
- jj=jj+1;
- }while((jj<=10)&&(MessageClass!=GADGETUP));
- jj=0;
- ReportMouse(MOUSENO,&nw);
- rdis_files();
- }
- while(MessageClass!=GADGETUP);
- do{
- ModifyIDCMP(w,WinIDCMP);
- if((message = (struct IntuiMessage *) GetMsg(w->UserPort)))ReplyMsg(message);
- }while (message);
- break;
- }
- case DSLIDE_GADGET:
- ModifyIDCMP(w,WinIDCMPM);
- dirflag = 1;
- set_point();
- jj=11;
- do{
- do{
- ReportMouse(MOUSEYES,&nw);
- WaitPort(w->UserPort);
- message = (struct IntuiMessage *) GetMsg(w->UserPort);
- MessageClass = message->Class;
- ReplyMsg(message);
- jj=jj+1;
- }while((jj<=10)&&(MessageClass!=GADGETUP));
- jj=0;
- ReportMouse(MOUSENO,&nw);
- rdis_files();
- }
- while(MessageClass!=GADGETUP);
- do{
- ModifyIDCMP(w,WinIDCMPM);
- if((message = (struct IntuiMessage *) GetMsg(w->UserPort)))ReplyMsg(message);
- }while (message);
- break;
- case ROOT_GADGET:
- par_dir(gadgid);
- break;
- case PARENT_GADGET:
- par_dir(gadgid);
- break;
-
- case FORMAT_GADGET: {
- if(DFfirst == 1){ DFfirst=0;
- display_error("****CLICK AGAIN TO FORMAT****",0);
- if(ASSIGNLOCK){
- sprintf(command, "%s","Assign c: ram:DUC");
- Execute(command,0,0);
- }
- break;
- }else{DFfirst=1;
- sprintf(command,"%s %s %s %s %s",FORMATP,"DRIVE",cpdbuf,"NAME",Exe_buf);
- Execute(command,0,0);
- display_error("***** NO ERROR - FORMAT COMPLETE *****",0);
- }}
- break;
- case DSKCPY_GADGET: {
- if(DFfirst == 1){ DFfirst=0;
- display_error("****CLICK AGAIN TO DISKCOPY****",0);
- if(ASSIGNLOCK){
- sprintf(command, "%s","Assign c: ram:DUC");
- Execute(command,0,0);
- }
- break;
- }else{
- nullterm(cd_buf,MAXCD);
- nullterm(cp_buf,MAXCD);
- if(dirflag == 0)
- sprintf(command,"%s %s %s %s %s",DISKCOPYP,"<ram:CRT",cd_buf,"TO",cp_buf);
- else
- sprintf(command,"%s %s %s %s %s",DISKCOPYP,"<ram:CRT",cp_buf,"TO",cd_buf);
- Execute(command,0,0);
- DFfirst = 1;
- display_error("***** DISK COPY COMPLETE *****",0);
- }}
- break;
- case SCRIPT_GADGET:
- case SHOW_GADGET:
- case ARCLIST_GADGET:
- case FILENOTE_GADGET:
- case ARC_GADGET:
- case DEARC_GADGET:
- case COPY_GADGET:
- case RENAME_GADGET:
- case TYPE_GADGET:
- case HTYPE_GADGET:
- case PRINT_GADGET:
- case EXEC_GADGET:
- case RUN_GADGET:
- case MOVE_GADGET:
- case MOVDEL_GADGET:
- case GRENAM_GADGET:
- case COPYALL_GADGET:
- case CPYDIRS_GADGET:
- action_on_selected(gadgid);
- break;
- case DELETE_GADGET:
- if(DEL == 1){ DEL=0;
- display_error("****CLICK AGAIN TO DELETE****",0);
- break;
- }else{ action_on_selected(gadgid);
- break;}
- case DELDIRS_GADGET:
- if(DEL == 1){ DEL=0;
- display_error("****CLICK AGAIN TO DELETE****",0);
- break;
- }else{ action_on_selected(gadgid);
- break;}
- case DELDIR_GADGET:
- if(DEL == 1){ DEL=0;
- display_error("****CLICK AGAIN TO DELETE****",0);
- break;
- }else{ action_on_selected(gadgid);}
- break;
- case SWAP_GADGET:
- if(dirflag==1) dirflag = 0;
- else dirflag = 1;
- set_point();
- RefreshGadgets(CD,w,NULL);
- break;
- case DINFO_GADGET:
- if(dirflag==1)Info2(cd_buf);
- else Info2(cp_buf);
- break;
- case SINFO_GADGET:
- if(dirflag==0)Info2(cd_buf);
- else Info2(cp_buf);
- break;
- case BYTE_GADGET:
- bytes = 0;
- files = 0;
- CDTT=CDT;
- for (i=0;i<*numdir;i++){
- if ((CDTT->dt_select == 1) && (!(CDTT->dt_dir))) {
- bytes = bytes + CDTT->dt_size;
- files++;};
- CDTT=CDTT+1;
- }
- sprintf(command,"%d Bytes in %d Files",bytes,files);
- display_error(command,0);
- break;
- case MAKEDIR_GADGET:
- if(MakeDirLock = Lock(cpdbuf,ACCESS_READ)) {
- UnLock(MakeDirLock);
- display_error("Directory or File Already Exists " ,IoErr());
- break;
- }
- if (!(MakeDirLock = CreateDir(cpdbuf))) {
- display_error("CreateDir Failed ",IoErr());
- break;
- };
- UnLock(MakeDirLock);
- getdir(DIR);
- new_dir(); break;
- case DF0_GADGET:
- getdir("df0:"); new_dir(); break;
- case DF1_GADGET:
- getdir("df1:"); new_dir(); break;
- case DF2_GADGET:
- getdir("df2:"); new_dir(); break;
- case DH0_GADGET:
- getdir("dH0:"); new_dir(); break;
- case DH1_GADGET:
- getdir("dH1:"); new_dir(); break;
- case DH2_GADGET:
- getdir("dH2:"); new_dir(); break;
- case RAM_GADGET:
- getdir("ram:"); new_dir(); break;
- case EDIT_GADGET:
- display_error("Now Editing Selected File",0);
- action_on_selected(gadgid);
- display_error("Status: O.K.",0);
- break;
- case GETDIR_GADGET:
- getdir(requestedcd);
- new_dir();
- break;
- case ALLWIND_GADGET:
- CDTT = CDT;
- CDTT = CDTT + *cur_index;
- for (i=0;i<MAXFNAME;i++){
- if(!CDTT->dt_dir) CDTT->dt_select = 1;
- CDTT = CDTT +1;
- }
- dis_files(*cur_index);
- break;
- case CLRWIND_GADGET:
- CDTT=CDT;
- CDTT = CDTT + *cur_index;
- for (i=0;i<MAXFNAME;i++){
- CDTT->dt_select = 0;
- CDTT = CDTT +1;
- }
- dis_files(*cur_index);
- break;
- case CLRDIRS_GADGET:
- CDTT=CDT;
- for (i=0;i<*numdir;i++){
- if(CDTT->dt_dir) CDTT->dt_select = 0;
- CDTT = CDTT +1;
- }
- dis_files(*cur_index);
- break;
- case ALLDIRS_GADGET:
- CDTT=CDT;
- for (i=0;i<*numdir;i++){
- if(CDTT->dt_dir) CDTT->dt_select = 1;
- CDTT = CDTT +1;
- }
- dis_files(*cur_index);
- break;
- case CLEAR_GADGET:
- CDTT=CDT;
- for (i=0;i<*numdir;i++){
- CDTT->dt_select = 0;
- CDTT = CDTT +1;
- }
- dis_files(*cur_index);
- break;
- case ALL_GADGET:
- CDTT=CDT;
- for (i=0;i<*numdir;i++){
- if (!CDTT->dt_dir) CDTT->dt_select = 1;
- CDTT=CDTT+1;
- }
- dis_files(*cur_index);
- break;
- default:
- break;
- }
- }
-
- getdir_dest()
- {
- if(dirflag == 1) dirflag = 0;
- else dirflag =1;
- set_point();
- getdir(DIR);
- new_dir();
- if(dirflag == 1) dirflag = 0;
- else dirflag =1;
- set_point();
- }
- new_dir_dest()
- {
- register i1;
- struct DT *SDTT,*tt_DDTT,*DDTT,*t_DDTT;
- int *Snum,*Dnum;
- int temp,found,num;
- SDTT=CDT;
- Snum =numdir;
- if(dirflag == 0)
- {DDTT = &DDT[0];
- Dnum = &Dnumdir;
- SDTT = &SDT[0];
- }else{DDTT = &SDT[0];
- Dnum = &Snumdir;
- SDTT = &DDT[0];
- }
- temp = *Dnum;
- t_DDTT = DDTT;
- t_DDTT = t_DDTT + *Dnum;
- for(i1=0;i1<*Snum;i1++)
- {
- /* move file to destination directory*/
- /*add entry to destination directory */
- /* sort directory and return to source directory*/
- if(SDTT->dt_select == 2)
- {
- num=0;
- found = 1;
- tt_DDTT = DDTT;
- do{
- found = strcmp(tt_DDTT->dt_fname ,SDTT->dt_fname);
- tt_DDTT = tt_DDTT +1;
- num = num+1;
- }
- while((num <= *Dnum) && (found !=0));
- if(found!=0){
- strcpy(t_DDTT->dt_fname,SDTT->dt_fname);
- t_DDTT->dt_select = 0;
- t_DDTT->dt_dir = SDTT->dt_dir;
- t_DDTT->dt_size = SDTT->dt_size;
- nullterm(t_DDTT->dt_fname,MAXCHAR);
- t_DDTT = t_DDTT +1;
- temp++;
- }
- else{
- tt_DDTT = tt_DDTT -1;
- tt_DDTT->dt_select = 0;
- tt_DDTT->dt_size = SDTT->dt_size;
- tt_DDTT->dt_dir = SDTT->dt_dir;
- }
- }
- SDTT = SDTT + 1;
- }/*end of for*/
- if(*Dnum != temp) qsort(DDTT,temp,(sizeof(struct DT)));
- *Dnum = temp;
- if(dirflag==1)dirflag=0;
- else dirflag = 1;
- set_point();
- new_dir();
- if(dirflag==1)dirflag=0;
- else dirflag = 1;
- set_point();
- }/* end of routine*/
-
- getdir(DirToGet)
- char *DirToGet;
- {
- struct FileLock *filelock;
- struct FileInfoBlock *fb;
- char EffectiveDir[MAXCD+1];
-
-
- if (!(*DirToGet)) strcpy(EffectiveDir,":");
- else strcpy(EffectiveDir,DirToGet);
- set_point();
- /*If we cant open requested dir, don't change*/
- TRYAGAIN:
- if (!(filelock = Lock(EffectiveDir,ACCESS_READ))) {
- strcpy(EffectiveDir,DIR);
- display_error("Can't Lock Requested Directory ",IoErr());
- if(!(filelock = Lock(EffectiveDir,ACCESS_READ))) {
- display_error("Can't Lock Current Dir. Switching to Ram: ",IoErr());
- strcpy(EffectiveDir,"ram:");
- goto TRYAGAIN;
- }
- }
- /*Allocate the file info block*/
- fb = AllocMem(FBSIZE,MEMF_CLEAR | MEMF_PUBLIC);
- if (!Examine(filelock,fb)) {
- FreeMem(fb,FBSIZE);
- UnLock(filelock);
- display_error("Can't Read Info Block. Switching to Ram: ",IoErr());
- strcpy(EffectiveDir,"ram:");
- goto TRYAGAIN;
- }
- if(fb->fib_DirEntryType < 0) { /*ITS A FILE- NOT A DIRECTORY*/
- strcpy(EffectiveDir,DIR);/*Forget request, use current*/
- FreeMem(fb,FBSIZE);
- UnLock(filelock);
- display_error("Directory Requested was Regular File - No Changes ",IoErr());
- goto TRYAGAIN;
- }
-
- /*Copy directory string into gadget structure*/
- strcpy(cpdbuf,EffectiveDir);
- Cpdir_str.NumChars = strlen(EffectiveDir);
- Cpdir_str.BufferPos = strlen(EffectiveDir);
- strcpy(DIR,EffectiveDir);
- strcpy(requestedcd,EffectiveDir);
- RefreshGadgets(CD,w,NULL);
-
- *numdir = 0;
- *cur_index = 0;
- /*Loop through each of the files in this directory*/
- while (ExNext(filelock,fb)) {
- if (fb->fib_DirEntryType < 0) CDT->dt_dir = 0;
- else CDT->dt_dir = -1;
- CDT->dt_select = 0;
- CDT->dt_size = fb->fib_Size;
- strcpy(CDT->dt_fname,fb->fib_FileName);
- nullterm(CDT->dt_fname,MAXCHAR);
- CDT = CDT +1;
- if (++*numdir == MAXFILE) break;
- }
- set_point();
- qsort(CDT,*numdir,(sizeof (struct DT)));
- FreeMem(fb,FBSIZE);
- UnLock(CurrentDirLock); /*Release old CD lock */
- UnLock(filelock); /*Release new request lock*/
- CurrentDirLock = Lock(EffectiveDir);
- CurrentDir(CurrentDirLock); /*MAKE IT THE CURRENT DIRECTORY*/
- }
-
- rdis_files()
- {
- USHORT Vpot;
- int numd;
- int pos;
-
- if (*numdir > MAXFNAME) {
- if (dirflag == 0)
- Vpot = slide_prop.VertPot;
- else
- Vpot = Dslide_prop.VertPot;
- Vpot >>= 1;
- Vpot &= 0x7fff;
- numd = *numdir - MAXFNAME;
- pos = ((float) Vpot / (float) 0x7fff) * numd;
- *cur_index = pos;
- dis_files(pos);
- }
- }
- void new_dir()
- {
- USHORT Vbody;
-
- if (*numdir <= MAXFNAME)
- Vbody = 0xffff;
- else {
- Vbody = ((float) 0x7fff)/(((float) *numdir)/((float) MAXFNAME));
- Vbody <<= 1;
- }
- *cur_index = 0;
- if (dirflag == 0)
- ModifyProp(SL,w,NULL,slide_prop.Flags,0,0,0,Vbody);
- else
- ModifyProp(SL,w,NULL,Dslide_prop.Flags,0,0,0,Vbody);
- dis_files(0);
- return;
- }
-
- set_point()
- {
- if (dirflag == 0){
- CDT=&SDT[0];
- SL = &Slide_gad;
- CD = &Curdir_gad;
- wind_start = 14;
- numdir = &Snumdir;
- cur_index = &Scur_index;
- DIR = curdir;
- requestedcd = requestedsd;
- cpdbuf = cd_buf;
- CUR_str_border.FrontPen = 3;
- CP_str_border.FrontPen = 1;
- }
- else{
- CDT=&DDT[0];
- SL = &DSlide_gad;
- CD = &Cpdir_gad;
- wind_start = 96;
- numdir = &Dnumdir;
- cur_index = &Dcur_index;
- DIR = cpdir;
- requestedcd = requesteddd;
- cpdbuf = cp_buf;
- CUR_str_border.FrontPen = 1;
- CP_str_border.FrontPen = 3;
- };
- RefreshGadgets(&Curdir_gad,w,NULL);
- RefreshGadgets(&Cpdir_gad,w,NULL);
- }
- dis_files(pos)
- int pos;
- {
- register i;
-
- for (i=0;i<MAXFNAME;i++) dis_name(i+pos,i);
- }
-
- dis_name(file,pos)
- register file,pos;
- {
- static char file_name[MAXCHAR+8];
- static struct IntuiText file_text = {2,0,JAM2,15,13,NULL,(UBYTE *)file_name,NULL };
-
- /*Set the top position*/
- file_text.TopEdge = (pos*8)+wind_start;
-
- if (file == -1 || file >= *numdir) {
- sprintf(file_name,"%-38.38s","");
- file_text.FrontPen = 2;
- file_text.BackPen = 2; /*black*/
- } else {
- CDTT=CDT;
- CDTT = CDTT+file;
- if (CDTT->dt_dir) {
- sprintf(file_name,"%-30.30s%-8.8s",CDTT->dt_fname,"");
- if (CDTT->dt_select) {
- file_text.FrontPen = 2; /*Black on Orange*/
- file_text.BackPen = 3;
- } else {
- file_text.FrontPen = 3; /*Orange on Black*/
- file_text.BackPen = 2;
- }
- } else {
- sprintf(file_name,"%-30.30s %7ld",CDTT->dt_fname,
- CDTT->dt_size);
- if (CDTT->dt_select) {
- file_text.FrontPen = 2; /*Black on White*/
- file_text.BackPen = 1;
- } else {
- file_text.FrontPen = 1; /*White on Black*/
- file_text.BackPen = 2;
- }
- }
- }
-
- /*Display the text*/
- PrintIText(rp,&file_text,0,0);
- }
-
- void sel_file()
- {
- int file;
- char *ptr;
- struct DT *temp_CDT;
- struct DT *temp_CDT1;
- if((dirflag==0)&&(message->MouseY > (wind_start + (MAXFNAME*8)))) dirflag = 1;
- else if((dirflag==1)&&(message->MouseY < wind_start)) dirflag = 0;
- set_point();
- temp_CDT=CDT;
- temp_CDT1=CDT;
- if (message->MouseX < 12 || message->MouseX > 318 || message->MouseY < wind_start || message->MouseY >= (MAXFNAME*8+wind_start))
- return;
- file = message->MouseY - wind_start;
- file /= 8;
- if((!*numdir) || (file > MAXFNAME) || ((file+*cur_index) > *numdir))
- return;
-
-
- temp_CDT = temp_CDT+file+*cur_index ;
-
- if (temp_CDT->dt_dir) {
- temp_CDT1 = CDT;
- ptr = DIR +strlen(DIR) - 1;
- if(temp_CDT->dt_select ^= 1)
- sprintf(requestedcd,"%s%s%s",DIR,((*ptr == ':') ? "":"/"),
- temp_CDT->dt_fname);
- else
- strcpy(requestedcd,DIR);
- dis_files(*cur_index);
- return;
- }
- temp_CDT->dt_select ^= 1;
- dis_name(file+ *cur_index,file);
- }
-
- action_on_selected(gadgid)
- int gadgid;
- {
- struct IntuiMessage *message;
- struct DT *temp_CDT, *sptr, *dptr;
- struct DT *CDTI;
- register i, i1, temp;
- char filename[MAXCD+MAXCHAR+2],dfilename[MAXCD+MAXCHAR+2];
- char *ptr,*ptr1;
- /*At each iteration, check for any IntuiMessages that would signal
- user wants to halt operation: GADGETUP(he hit a gadget) or
- MOUSEBUTTONS(button press on something we dont recognize)*/
-
- ModifyIDCMP(w,MOUSEBUTTONS);
- CDT1 = CDT;
- for (i=0;i<*numdir;i++) {
- if((gadgid != SHOW_GADGET) && (message = (struct IntuiMessage *) GetMsg(w->UserPort))) {
- ReplyMsg(message);
- MessageClass = message->Class;
- if(MessageClass==MOUSEBUTTONS){
- display_error("OPERATION ABORTED",0);
- break;}
- }
- if((CDT1->dt_select) || (gadgid == COPYALL_GADGET)){
- ptr = DIR + strlen(DIR) - 1;
- if(dirflag==0)ptr1 = cpdir + strlen(cpdir)-1;
- else ptr1 = curdir + strlen(curdir)-1;
- if (*ptr == ':')
- sprintf(filename,"%s%s",DIR,CDT1->dt_fname);
- else
- sprintf(filename,"%s/%s",DIR,CDT1->dt_fname);
- /* get destination file name*/
- if(dirflag==0)
- if (*ptr1 == ':')
- sprintf(dfilename,"%s%s",cpdir,CDT1->dt_fname);
- else
- sprintf(dfilename,"%s/%s",cpdir,CDT1->dt_fname);
- else
- if (*ptr1 == ':')
- sprintf(dfilename,"%s%s",curdir,CDT1->dt_fname);
- else
- sprintf(dfilename,"%s/%s",curdir,CDT1->dt_fname);
-
- switch (gadgid) {
- case MOVDEL_GADGET:
- if(dirflag ==0) copy(filename,cp_buf);
- else copy(filename,cd_buf);
- if(LOCK=Lock(dfilename,ACCESS_READ)){
- if(CDT1->dt_dir) {
- display_error("File is a Directory",0);
- break;
- }
- if(!(DeleteFile(filename)))
- display_error("Could Not Delete Requested File ",IoErr());
- else CDT1->dt_select = 2;
- UnLock(LOCK);}
- break;
- case DSKCPY_GADGET:
- case DELETE_GADGET:
- if(CDT1->dt_dir) {
- display_error("File is a Directory",0);
- DEL = 1;
- break;
- }
- if(!(DeleteFile(filename)))
- display_error("Could Not Delete Requested File ",IoErr());
- else CDT1->dt_select = 2;
- DEL = 1;
- break;
-
- case DELDIR_GADGET:
- if(!CDT1->dt_dir) {
- display_error("File is not a Directory",0);
- DEL = 1;
- break;
- }
- if(!(DeleteFile(filename)))
- display_error("Could not Delete Requested Directory ",IoErr());
- else CDT1->dt_select = 2;
- DEL = 1;
- break;
-
- case COPY_GADGET:
- if(dirflag == 0)copy(filename,cp_buf);
- else copy(filename,cd_buf);
- CDT1->dt_select = 2;
- break;
-
- case SHOW_GADGET:
- if(SHOWLOCK) {
- display_error("Now Showing Selected Pictures",0);
- sprintf(command,"%s %s",SHOWP,filename);
- Execute(command,0,0);
- }
- break;
-
- case SCRIPT_GADGET:
- if(PLAYERLOCK) {
- display_error("Now Playing Selected Scripts",0);
- sprintf(command,"%s %s",PLAYERP,filename);
- Execute(command,0,0);
- display_error("Status: O.K.",0);
- }
- break;
-
- case DEARC_GADGET:
- if(ARCLOCK) {
- display_error("Extracting Files From Archive",0);
- if(dirflag == 0)
- sprintf(command,"%s %s %s %s",ARCP,"x",filename,cp_buf);
- else
- sprintf(command,"%s %s %s %s",ARCP,"x",filename,cd_buf);
- Execute(command,0,0);
- display_error("Status: O.K.",0);
- }
- break;
- case COPYALL_GADGET:
- display_error("COPYING ALL FILES TO DESTINATON",0);
- if(dirflag == 0)
- sprintf(command,"%s %s %s %s",COPYP,cd_buf,"ALL TO",cp_buf);
- else
- sprintf(command,"%s %s %s %s",COPYP,cp_buf,"ALL TO",cd_buf);
- Execute(command,0,0);
- display_error("Status: O.K.",0);
- break;
-
- case CPYDIRS_GADGET:
- if(CDT1->dt_dir) {
- display_error("COPYING DIRECTORIES TO DESTINATON",0);
- if(LOCK = Lock(dfilename,ACCESS_READ)) UnLock(LOCK);
- else
- if (!(LOCK = CreateDir(dfilename,ACCESS_READ))) {
- display_error("ERROR COPYING TO DESTINATION DIRECTORY",0);
- CDT1->dt_select = 0;
- }
- else {UnLock(LOCK);
- if(dirflag == 0)
- sprintf(command,"%s %s %s %s",COPYP,filename,"ALL TO",dfilename);
- else
- sprintf(command,"%s %s %s %s",COPYP,filename,"ALL TO",dfilename);
- Execute(command,0,0);
- display_error("Status: O.K.",0);
- CDT1->dt_select = 2;
- }}break;
-
- case DELDIRS_GADGET:
- if(CDT1->dt_dir) {
- display_error("DELETEING REQUESTED DIRECTORIES",0);
- if(dirflag == 0)
- sprintf(command,"%s %s %s",DELETEP,filename,"ALL");
- else
- sprintf(command,"%s %s %s",DELETEP,filename,"ALL");
- Execute(command,0,0);
- DEL = 1;
- display_error("Status: O.K.",0);
- CDT1->dt_select = 2;
- }break;
- case ARC_GADGET:
- if(ARCLOCK) {
- CDTI = CDT;
- display_error("Adding Files To Destination Archive",0);
- for (i=1;i<=*numdir;i++){ /* Loop All Selected Files Together */
- if ((CDTI->dt_select == 1) && (!(CDTI->dt_dir))){
- CDTI->dt_select=0;
- if (*ptr == ':')
- sprintf(filename,"%s %s%s",filename,DIR,CDTI->dt_fname);
- else
- sprintf(filename,"%s %s/%s",filename,DIR,CDTI->dt_fname);
- } CDTI = CDTI + 1;
- }
- if(dirflag ==0)
- sprintf(command,"%s %s %s %s",ARCP,"a",cp_buf,filename);
- else
- sprintf(command,"%s %s %s %s",ARCP,"a",cd_buf,filename);
- Execute(command,0,0);
- display_error("Status: O.K.",0);
- }
- break;
- case ARCLIST_GADGET:
- if(ARCLOCK) {
- display_error("Reading Files in Selected Arc File",0);
- sprintf(command,"%s %s %s",ARCP,"v",filename);
- Execute(command,0,0);
- display_error("Status: O.K.",0);
- }
- break;
- case EXEC_GADGET:
- sprintf(command,"%s %s %s %s",EXECUTEP,"> NIL:",filename,Exe_buf);
- Execute(command,0,0);
- break;
- case RUN_GADGET:
- sprintf(command,"%s %s %s %s",RUNP,"> NIL:",filename,Exe_buf);
- Execute(command,0,0);
- break;
- case TYPE_GADGET:
- if(!CDT1->dt_dir) Print_to_screen(filename);
- break;
- case HTYPE_GADGET:
- if(!CDT1->dt_dir) Hprint_to_screen(filename);
- break;
- case PRINT_GADGET:
- if(!CDT1->dt_dir) Print_to_printer(filename);
- break;
- case MOVE_GADGET:
- if(dirflag == 0){
- ptr = cp_buf + strlen(cp_buf)-1;
- if (*ptr == ':')
- sprintf(command,"%s%s",cp_buf,CDT1->dt_fname);
- else
- sprintf(command,"%s/%s",cp_buf,CDT1->dt_fname);
- }else{
- ptr = cd_buf + strlen(cd_buf)-1;
- if (*ptr == ':')
- sprintf(command,"%s%s",cd_buf,CDT1->dt_fname);
- else
- sprintf(command,"%s/%s",cd_buf,CDT1->dt_fname);
- }
- if(!(Rename(filename,command)))
- display_error("Cannot Rename to Requested Path ",IoErr());
- else CDT1->dt_select = 2;
-
- break;
- case GRENAM_GADGET:
- CONV_FILE_NAME();
- if(err == 1)
- display_error("file name size error ",0);
- else
- if(!(Rename(filename,cpdbuf)))
- display_error("Cannot Rename to Requested Path ",IoErr());
- else {
- strcpy(CDT1->dt_fname,ASTR);
- }
- break;
- case FILENOTE_GADGET:
- if (!(SetComment(filename,Exe_buf))) {
- display_error("Comment Failed on file",IoErr());
- };
- break;
- case RENAME_GADGET:
- if(!(Rename(filename,cpdbuf)))
- display_error("Cannot Rename to Requested Path ",IoErr());
- else {
- ptr = cpdbuf + strlen(DIR);
- if(*ptr=='/') ptr = ptr+1;
- strcpy(CDT1->dt_fname,ptr);
- }
- break;
-
- case EDIT_GADGET:
- if(!CDT1->dt_dir) {
- sprintf(command, "%s %s",EP,filename);
- Execute(command,0,NILFD);
- }
- break;
- default:
- break;
- } /*switch*/
- if ((gadgid != DELDIR_GADGET)
- && (gadgid != DELETE_GADGET)
- && (gadgid != DELDIRS_GADGET)
- && (gadgid != COPY_GADGET)
- && (gadgid != CPYDIRS_GADGET)
- && (gadgid != MOVE_GADGET)
- && (gadgid != MOVDEL_GADGET)) CDT1->dt_select = 0;
- if(RENAME_GADGET == gadgid) break; /*RENAME FIRST FILE ONLY!*/
- if(COPYALL_GADGET == gadgid)break;/*not based on seleect*/
- if(FILENOTE_GADGET == gadgid)break;
- } /*if selected*/
- CDT1 = CDT1 +1;
- } /*for all*/
- if((MOVDEL_GADGET == gadgid) ||
- (MOVE_GADGET == gadgid) ||
- (COPY_GADGET == gadgid) ||
- (CPYDIRS_GADGET == gadgid)) new_dir_dest();
-
- if((ARC_GADGET == gadgid) ||
- (DEARC_GADGET == gadgid)||
- (COPYALL_GADGET == gadgid)){
- getdir_dest();
- if(DEARC_GADGET==gadgid){
- status = strcmp(cpdir,curdir);
- if(status==0)
- if(dirflag==0)getdir(curdir);
- else getdir(cpdir);
- }
- }else {
- temp = *numdir;
- temp_CDT=CDT;
- for (i1=0;i1<*numdir;i1++){
- if((gadgid == COPY_GADGET)||
- (gadgid==CPYDIRS_GADGET))temp_CDT->dt_select = 0;
- if (temp_CDT->dt_select == 2) {
- strcpy(temp_CDT->dt_fname,"\xff\xff\xff");
- temp_CDT->dt_select = 0;
- temp--;
-
- };
- temp_CDT = temp_CDT +1;
- }
- if ((*numdir != temp) ||
- (RENAME_GADGET == gadgid) ||
- (GRENAM_GADGET == gadgid)) qsort(CDT,*numdir,(sizeof (struct DT)));
- *numdir = temp;
- };
- ptr5 = cpdbuf + strlen(cpdbuf)-1;
- if((gadgid==RENAME_GADGET) || (gadgid ==GRENAM_GADGET)){
- for (;ptr5 >= cpdbuf;ptr5--) {
- if (*ptr5 == ':') {
- *(ptr5+1) = 0;
- break;
- }
- if (*ptr5 == '/') {
- *ptr5 = 0;
- break;
- }
- }
- }
- *Exe_buf =0;
- if ((RENAME_GADGET == gadgid) ||
- (GRENAM_GADGET == gadgid)){
- status = strcmp(cpdir,curdir);
- if(status==0){
- if(dirflag==0){sptr = &SDT[0];
- dptr = &DDT[0];
- }else{sptr = &DDT[0];
- dptr = &SDT[0];}
- for (i1=0;i1<*numdir;i1++){
- strcpy(dptr->dt_fname,sptr->dt_fname);
- dptr=dptr+1;
- sptr=sptr+1;
- }
- }
- if(dirflag==1)dirflag=0;
- else dirflag = 1;
- set_point();
- new_dir();
- if(dirflag==1)dirflag=0;
- else dirflag = 1;
- set_point();
- }
-
-
- new_dir();
-
- ModifyIDCMP(w,WinIDCMP);
- }
-
- void par_dir(gadgid) /*Parent and Root*/
- int gadgid; {
- char *ptr; /*With this, we may change curdir*/
-
- ModifyIDCMP(w,0);
- ptr = DIR + strlen(DIR)-1;
- if((PARENT_GADGET == gadgid) ||(GRENAM_GADGET == gadgid))
- for (;ptr >= DIR;ptr--) {
- if (*ptr == ':') {
- *(ptr+1) = 0;
- break;
- }
- if (*ptr == '/') {
- *ptr = 0;
- break;
- }
- }
- else /*Gadget was root. Scan back to :*/
- for (;ptr >= DIR;ptr--){
- if (*ptr == ':') {
- *(ptr+1) = 0;
- break;
- }
- }
- getdir(DIR);
- new_dir();
- ModifyIDCMP(w,WinIDCMP);
- return;
- }
- CONV_FILE_NAME()
- {
-
- int toksiz,ser_key_size,MAX,LENCS,count,LENT,LENS;
- char *PEX,*AST;/*append string*/
- char rep_str[30],ser_str[30];
- int act,len_mat;
- int LENSS,LENRS,LENPRE,LENSUF,LENC;
-
- char *ptr3,*ptr4,*dirptr,*ptr,*ptr1,*ptr2;
- err = 0;
- ptr4 = &ptr3;
- toksiz = 1;
- LENT = 2;
- ser_key_size = 2;
- PEX = Exe_buf+2;
- dirptr = DIR + strlen(DIR)-1;
- nullterm(CDT1->dt_fname,MAXCD);
- LENS = strlen(CDT1->dt_fname); /*length of name on source string*/
- MAX=29;
- AST = ASTR;
- ptr=Exe_buf+strlen(Exe_buf)-1;
- ptr2=Exe_buf,ptr1=Exe_buf;
- /*find comand strings*/
- for (;ptr >= Exe_buf;ptr--){
- if(*ptr == '>') ptr2=ptr;
- }
- nullterm(Exe_buf,MAXCD);
- LENCS = strlen(Exe_buf)-2;/*lenght of append string*/
- LENC = LENCS;
- act = strncpy(ASTR,PEX,LENC);/*string to attach*/
- count = stcd_i(ASTR,&LENT);
- if((*Exe_buf=='+') && (*(Exe_buf+1)==']')){
- if(LENCS<=0)err=1;
- if ((MAX-(LENCS+LENS))<=0)err=1;
- else{
- strcat(ASTR,CDT1->dt_fname);
- if(*dirptr == ':')
- sprintf(cpdbuf,"%s%s",DIR,ASTR);
- else
- sprintf(cpdbuf,"%s/%s",DIR,ASTR);
- }
- }
- if((*Exe_buf=='+') && (*(Exe_buf+1)=='[')){
- if(LENCS<=0)err=1;
- if ((MAX-(LENCS+LENS))<=0)err=1;
- else{
- strcat(CDT1->dt_fname,ASTR);
- strcpy(ASTR,CDT1->dt_fname);
- if(*dirptr == ':')
- sprintf(cpdbuf,"%s%s",DIR,CDT1->dt_fname);
- else
- sprintf(cpdbuf,"%s/%s",DIR,CDT1->dt_fname);
- }
- }
- if((*Exe_buf=='-') && (*(Exe_buf+1)==']')){
- if(count==0) err=1;
- else if(LENT <= 0) err=1;
- else if (LENT >= LENS) err=3;
- else{
- ptr = (CDT1->dt_fname) + LENT;
- strcpy(ASTR,ptr);
- if(*dirptr == ':')
- sprintf(cpdbuf,"%s%s",DIR,ptr);
- else
- sprintf(cpdbuf,"%s/%s",DIR,ptr);
- }
- }
- if((*Exe_buf=='-') && (*(Exe_buf+1)=='[')){
- if(count==0) err=1;
- else if(LENT <= 0) err=1;
- else if (LENT >= LENS) err=3;
- else{
- ptr = (CDT1->dt_fname) ;
- ptr1 = ptr + (LENS-LENT);
- *ptr1 = 0;
- strcpy(ASTR,ptr);
- if(*dirptr == ':')
- sprintf(cpdbuf,"%s%s",DIR,ptr);
- else
- sprintf(cpdbuf,"%s/%s",DIR,ptr);
- }
- }
- if((*Exe_buf=='#') && (*(Exe_buf+1)=='?')){
- LENSS = ptr2 - PEX;
- LENRS = LENCS - LENSS - 1;
- if(LENRS <= 0) err=1;
- if(LENSS <= 0) err=1;
- if(LENSS >> MAX) err=1;
- if(LENRS >> MAX) err=1;
- if((LENS - LENSS + LENRS)>>MAX) err=1;
- *ptr2 = 0;
- strcpy(ser_str,"s+");
- strcpy((ser_str + 2),PEX);
- strcpy(rep_str,(ptr2 + 1));
- len_mat = stcpm((CDT1->dt_fname),PEX,ptr4);
- *ptr2 = '>';
- if(len_mat == LENSS)
- { LENPRE = ptr3 - (CDT1->dt_fname);
- LENSUF = LENS - LENPRE - len_mat;
- strcpy(ser_str,(CDT1->dt_fname),LENPRE);
- strcpy((ser_str+LENPRE),(ptr2+1),LENRS);
- strcpy((ser_str+LENPRE+LENRS),(ptr3+LENSS),LENSUF);
- strcpy(ASTR,ser_str);
- if(*dirptr == ':')
- sprintf(cpdbuf,"%s%s",DIR,ser_str);
- else
- sprintf(cpdbuf,"%s/%s",DIR,ser_str);
- }
- } /* end of replace */
- } /* end routine */
-
- /*The following function is used to compare two directory entries*/
- comp(dt1,dt2)
- struct DT *dt1,*dt2;
- {
- char *ptr1,*ptr2;
- register c1,c2;
-
- for (ptr1=dt1->dt_fname,ptr2=dt2->dt_fname;*ptr1 && *ptr2;ptr1++,ptr2++) {
- c1 = *ptr1;
- c2 = *ptr2;
-
- c1 &= 0xdf;
- c2 &= 0xdf;
-
- if (c1 > c2) return (-1);
-
- if (c1 < c2) return (1);
- }
-
- if (*ptr1) return (-1);
-
- return (0);
- }
-
- void copy(s,pc)
- char *s;
- char *pc;
- {
- struct FileHandle *copyin;
- struct FileHandle *copyout;
- int iosize;
- int actual;
- char *copybuf;
- struct FileLock *fl;
- char *ptr;
- char *ptr1;
-
- if (!(copyin = Open(s,MODE_OLDFILE)))
- return;
-
- if (!*pc) {
- display_error("No Destination Path Given",0);
- return;
- }
-
- if ((fl = Lock(pc,ACCESS_READ))) {
- UnLock(fl);
- ptr = strlen(pc) + pc - 1;
- for (ptr1=s+strlen(s)-1;ptr1 > s;ptr1--) {
- if (*ptr1 == '/' || *ptr1 == ':')
- break;
- }
- if (*ptr1 == '/' || *ptr1 == ':')
- ptr1++;
- if (*ptr == ':')
- sprintf(command,"%s%s",pc,ptr1);
- else
- sprintf(command,"%s/%s",pc,ptr1);
- } else {
- display_error("Illegal Destination Path ",IoErr());
- Close(copyin);
- return;
- }
-
- if (!strcmp(command,s)) {
- display_error("Cannot Copy File to Itself",0);
- Close(copyin);
- return;
- }
-
- if (!(copyout = Open(command,MODE_NEWFILE))) {
- display_error("Cannot Write to Requested Path ",IoErr());
- Close(copyin);
- return;
- } else {
- /*Determine the length of the file*/
- iosize = Seek(copyin,0,OFFSET_BEGINING);
- iosize = 12288;
- /*Allocate memory for the copy buffer*/
- do {
- copybuf = AllocMem(iosize,MEMF_PUBLIC);
- if (copybuf == 0)
- iosize = iosize/2;
- } while (copybuf == 0 & iosize > 512);
-
- /*Copy the file*/
- do {
- actual = Read(copyin,copybuf,iosize);
- if (Write(copyout,copybuf,actual) != actual)
- break;
- } while (actual == iosize);
-
- /*Free the copy buffer*/
- FreeMem(copybuf,iosize);
-
- /*Close the input and output buffers*/
- Close(copyout);
- Close(copyin);
- }
- }
-
- nullterm(str,len) /*End a string with a null*/
- char *str;
- int len;
- {
- register i;
-
- str[len] = 0;
- for (i=len;len >= 0;len--) {
- if (str[i] != ' ' && str[i])
- break;
- str[i] = 0;
- }
- }
-
- display_error(errormsg,doserrnum)
- char *errormsg;
- long doserrnum;
- {
- strcpy(err_buf,errormsg);
- if (doserrnum) sprintf(err_buf,"%s (DOS Error %d)",err_buf,doserrnum);
- err_str.NumChars = strlen(err_buf);
- err_str.BufferPos = strlen(err_buf);
- RefreshGadgets(&Err_gad,w,NULL);
- }
-
- close_things()
- {
- if(RSHOWLOCK ) UnLock(RSHOWLOCK);
- if(ARCLOCK ) UnLock(ARCLOCK);
- if(ELOCK ) UnLock(ELOCK);
- if(CDLOCK ) UnLock(CDLOCK);
- if(COPYLOCK ) UnLock(COPYLOCK);
- if(RRUNLOCK ) UnLock(RRUNLOCK);
- if(RDISKCOPYLOCK ) UnLock(RDISKCOPYLOCK);
- if(RFORMATLOCK ) UnLock(RFORMATLOCK);
- if(REXECUTELOCK ) UnLock(REXECUTELOCK);
- if(DELETELOCK ) UnLock(DELETELOCK);
- if(PLAYERLOCK ) UnLock(PLAYERLOCK);
- if(LIBCLOCK ) {UnLock(LIBCLOCK);
- sprintf(command,"%s","Assign libs: sys:libs");
- Execute(command,0,0);};
- if(ASSIGNLOCK ) {UnLock(ASSIGNLOCK);
- sprintf(command,"%s","sys:c/Assign c: sys:c");
- Execute(command,0,0);};
- sprintf(command,"%s","sys:c/Delete ram:libs all quiet");
- Execute(command,0,0);
- sprintf(command,"%s","sys:c/Delete ram:DUC all quiet");
- Execute(command,0,0);
- sprintf(command,"%s","sys:c/Delete ram:CRT");
- Execute(command,0,0);
- if (w) CloseWindow(w);
-
- if (GfxBase) CloseLibrary(GfxBase);
-
- if (IntuitionBase) CloseLibrary(IntuitionBase);
-
- if (InitialCurrentDirLock) {
- CurrentDir(InitialCurrentDirLock);
- UnLock(CurrentDirLock);
- }
- }
-
- qsort( v, n, size)
- char *v;
- short n;
- int size;
- {
- short gap, i, j;
- register x;
- char temp, *p1, *p2;
- for (gap=n/2;gap > 0; gap /= 2)
- for (i=gap; i<n; i++)
- for (j = i-gap; j >= 0; j -= gap)
- if ( comp((p1=v+j*size), (p2=v+(j+gap)*size)) < 0) {
- /*exchange them*/
- for (x=0; x<size; x++) {
- temp = *p1;
- *p1++ = *p2;
- *p2++ = temp;
- }
- }
- }
-
- void Print_to_screen(ptr)
- char *ptr[];
- {
-
- register i, len, len2;
-
- MyOpen(ptr);
- DoHeader();
- if (!done)
- do{
- len = Read(workfp,buf,512);
- len2 = 0;
- while (len2<len && done == FALSE){
- for (i=0; buf[len2+i] != 0x0a && i<78 && i+len2<511; i++)
- if (buf[len2+i] == 0x0c) buf[len2+i] = 0x20;
- Write(window,&buf[len2],i+1);
- len2 += i + 1;
- if (++linecount > 20 && buf[len2-1] == 0x0a) WaitSpace();
- }
- }while(len == 512 && done == FALSE);
- MyDone();
- MyClose();
- return;
- }
-
- void Print_to_printer(ptr)
- char *ptr[];
- {
-
- register len;
- done = FALSE; /*boolean variables*/
-
- workfp = Open(ptr,MODE_OLDFILE); /*Try to open the file to print*/
- if(workfp == NULL) done = TRUE;
- else {
- window = Open("prt:",MODE_NEWFILE);
- if(window == NULL) done = TRUE;
- }
- if (!done)
- do{
- len = Read(workfp,buf,512);
- Write(window,&buf[0],len);
- }while(len == 512);
-
- MyClose();
- return;
- }
- void Hprint_to_screen(ptr)
- char *ptr[];
- {
-
- register len;
- char r1[2];
- MyOpen(ptr);
- DoHeader();
- if (!done)
- strcpy(buffer," - ");
- r1[0]=0x00;r1[1]=0x00;
- do{
- index = 0;
- DoHex(r1,2);
- r1[1] += 16;
- if (!(r1[1])) r1[0]++;
- index = 6;
- len = Read(workfp,buf,16);
- buf[len]=0x0a;
- DoHex(buf,len,6);
- if (len) {
- Write(window,&buffer[0],index);
- if (len != 16) Write(window,&blank[0],42-index);
- Write(window,&buf[0],len+1);
- };
- if (++linecount > 21) WaitSpace();
- }while ((len == 16) && (done == FALSE));
- MyDone();
- MyClose();
- return;
- }
-
- void DoHex(ptr2,len)
- int len;
- char ptr2[];
- {
- unsigned char c1,c2;
- unsigned int i,i2=0;
- for (i=0;i<len;i++) {
- c1 = ((ptr2[i] & 0xf0) >>4);
- c2 = (ptr2[i] & 0x0f);
- if (c1 > 9) c1 += 87;
- else c1 += 48;
- if (c2 > 9) c2 += 87;
- else c2 += 48;
- buffer[index]=c1;
- buffer[index+1]=c2;
- if((buf[i] < 32) || (buf[i] > 127)) buf[i]=46;
- index += 2;
- if (++i2 == 4) {
- index++;
- i2=0;
- };
- }
- }
-
- void MyOpen(ptr)
- char *ptr[];
- {
- done = FALSE;
- linecount = 1;
- workfp = Open(ptr,MODE_OLDFILE);
- if(workfp == NULL) done = TRUE;
- else{
- strcpy(command,"raw:0/0/640/200/Listing of: ");
- strcat(command,ptr);
- window = Open(command,MODE_NEWFILE);
- if(window == NULL) done = TRUE;
- }
- }
-
- void DoHeader()
- {
- strcpy(command,"\x1b[33m<CR>\x1b[2m advances one line, \x1b[33mSpace Bar\x1b[2m");
- Write(window,command,strlen(command));
- strcpy(command," advances one page, and \x1b[33mESC\x1b[2m aborts.\n\x1b[0m");
- Write(window,command,strlen(command));
- }
-
- void WaitSpace()
- {
- unsigned char c;
-
- linecount = 1;
- /*print the messages in color 3*/
- strcpy(command,"\x1b[33mPress SPACE for more...\x1b[0m");
- Write(window,command,strlen(command));
- /*wait for a key*/
- while(Read(window,&c,1),c != ' ') {
- if (c == ESC){
- done = TRUE; /*short circuit*/
- break;
- }
- /*RETURN scrolls by one line*/
- else if (c == '\r'){
- linecount = 20;
- break;
- }
- }
- /*erase the message*/
- strcpy(command, "\r \r");
- Write(window,command,strlen(command));
- }
-
- void MyDone()
- {
- unsigned char c;
- strcpy(command,"\r\x1b[33mEnd of File. Press SPACE\x1b[0m");
- Write(window,command,strlen(command));
- /*Wait for spacebar to quit*/
- while(Read(window,&c,1),c != ' ');
- }
- void MyClose()
- {
- if(workfp) Close(workfp);
- if(window) Close(window);
- }
-