home *** CD-ROM | disk | FTP | other *** search
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
- * |_o_o|\\ Copyright (c) 1989 The Software Distillery. *
- * |. o.| || All Rights Reserved *
- * | . | || Written by John Toebes and Doug Walker *
- * | o | || The Software Distillery *
- * | . |// 235 Trillingham Lane *
- * ====== Cary, NC 27513 *
- * BBS:(919)-471-6436 *
- \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- #include "pickpack.h"
- #include "pwgen.h"
-
- #ifdef DEBUG
- int debug = 0;
- #endif
-
- #define RES1LINE 124
- #define RES2LINE 136
-
- static int Sendit(int);
- static int PutRes(int, LONG, int, struct MsgPort *);
- static int GetArg(int, LONG *, char *);
- static void setgad(struct Gadget *, char *, int, struct Window *, int);
-
- void main(int, char **);
- void MemCleanup(void);
-
- /* Global variables */
-
- struct Window *Window;
- struct TmpRas tmpras;
-
-
- static char menutrans[7][14] = {
- {
- /* FILEHANDLE */ SEL_HANDLE,
- /* FILEINFOBLOCK */ SEL_FILEINFO,
- /* INFODATA */ SEL_INFODATA,
- /* BUFFER */ SEL_BUFFER,
- /* */ 0,
- /* SEND */ SEL_SEND,
- /* */ 0,
- /* HELP */ SEL_HELP,
- /* */ 0,
- /* QUIT */ SEL_QUIT
- },
-
- {
- /* OPENINPUT */ SEL_OPENINPUT,
- /* OPENOUTPUT */ SEL_OPENOUTPUT,
- /* OPENUPDATE */ SEL_OPENUPDATE,
- /* READ */ SEL_READ,
- /* WRITE */ SEL_WRITE,
- /* SEEK */ SEL_SEEK,
- /* CLOSE */ SEL_CLOSE,
- /* TRUNCATE */ SEL_TRUNCATE
- },
-
- {
- /* LOCK */ SEL_LOCK,
- /* DUPLOCK */ SEL_DUPLOCK,
- /* UNLOCK */ SEL_UNLOCK,
- /* EXAMINE */ SEL_EXAMINE,
- /* EXNEXT */ SEL_EXNEXT,
- /* CREATEDIR */ SEL_CREATEDIR,
- /* DELETE */ SEL_DELETE,
- /* RENAME */ SEL_RENAME,
- /* PARENT */ SEL_PARENT,
- /* SETPROTECT */ SEL_SETPROTECT,
- /* SETCOMMENT */ SEL_SETCOMMENT,
- /* SETDATE */ SEL_SETDATE
- },
-
- {
- /* CURRENTVOL */ SEL_CURRENTVOL,
- /* INFO */ SEL_INFO,
- /* DISKINFO */ SEL_DISKINFO,
- /* RENAMEDISK */ SEL_RENAMEDISK
- },
-
- {
- /* DIE */ SEL_DIE,
- /* FLUSH */ SEL_FLUSH,
- /* MORECACHE */ SEL_MORECACHE,
- /* INHIBIT */ SEL_INHIBIT,
- /* WRITE_PROTECT */ SEL_WRITE_PROTECT,
- /* NETWORKHELLO */ SEL_NETWORKHELLO,
- /* DEBUG */ SEL_DEBUG,
- /* SETTRANS */ SEL_SETTRANS
- },
-
- {
- /* PickPacket V1.0 */ 0,
- /* Copyright... */ 0,
- /* All Rights.. */ 0,
- /* See PickPacket... */ 0,
- /* MUG SHOT */ 0
- },
-
- {
- /* DOSTRUE -1 */ SEL_MIN1,
- /* DOSFALSE 0 */ SEL_ZERO,
- /* */ 0,
- /* OFFSET_BEGINNING -1 */ SEL_MIN1,
- /* OFFSET_CURRENT 0 */ SEL_ZERO,
- /* OFFSET_END 1 */ SEL_ONE,
- /* */ 0,
- /* SHARED_LOCK -2 */ SEL_MIN2,
- /* ACCESS_READ -2 */ SEL_MIN2,
- /* */ 0,
- /* EXCLUSIVE_LOCK -1 */ SEL_MIN1,
- /* ACCESS_WRITE -1 */ SEL_MIN1,
- /* */ 0,
- /* NULL 0 */ SEL_ZERO
- }
-
- };
-
- UBYTE Buf1[14], Buf2[14], Buf3[14], Buf4[14], BufN[32];
- static struct IntuiText
- Buf1Text = {3, 0, JAM2, 328, 62, &TOPAZ80, Buf1, NULL },
- Buf2Text = {3, 0, JAM2, 328, 78, &TOPAZ80, Buf2, &Buf1Text },
- Buf3Text = {3, 0, JAM2, 328, 94, &TOPAZ80, Buf3, &Buf2Text },
- Buf4Text = {3, 0, JAM2, 328, 110, &TOPAZ80, Buf4, &Buf3Text },
- NameText = {3, 0, JAM2, 80, 46, &TOPAZ80, BufN, &Buf4Text };
-
- struct packettype
- {
- int number;
- char *name;
- int arg1, arg2, arg3, arg4, res1;
- };
-
- struct packettype packets[] = {
- { 0 }, /* First action begins at 0 */
- { ACTION_FINDINPUT, "ACTION_FINDINPUT", HAN, LCK, STR, 0, FLG },
- { ACTION_FINDOUTPUT, "ACTION_FINDOUTPUT", HAN, LCK, STR, 0, FLG },
- { ACTION_FINDUPDATE, "ACTION_FINDUPDATE", HAN, LCK, STR, 0, FLG },
- { ACTION_READ, "ACTION_READ", AG1, BUF, NUM, 0, NUM },
- { ACTION_WRITE, "ACTION_WRITE", AG1, BUF, NUM, 0, NUM },
- { ACTION_SEEK, "ACTION_SEEK", AG1, NUM, NUM, 0, NUM },
- { ACTION_END, "ACTION_END", AG1, 0, 0, 0, FLG },
- { ACTION_TRUNCATE, "ACTION_TRUNCATE", AG1, 0, 0, 0, FLG },
- { ACTION_LOCATE_OBJECT, "ACTION_LOCATE_OBJECT", LCK, STR, NUM, 0, LCK },
- { ACTION_COPY_DIR, "ACTION_COPY_DIR", LCK, 0, 0, 0, LCK },
- { ACTION_FREE_LOCK, "ACTION_FREE_LOCK", LCK, 0, 0, 0, FLG },
- { ACTION_EXAMINE_OBJECT,"ACTION_EXAMINE_OBJECT", LCK, FIB, 0, 0, FLG },
- { ACTION_EXAMINE_NEXT, "ACTION_EXAMINE_NEXT", LCK, FIB, 0, 0, FLG },
- { ACTION_CREATE_DIR, "ACTION_CREATE_DIR", LCK, STR, 0, 0, LCK },
- { ACTION_DELETE_OBJECT, "ACTION_DELETE_OBJECT", LCK, STR, 0, 0, FLG },
- { ACTION_RENAME_OBJECT, "ACTION_RENAME_OBJECT", LCK, STR, LCK, STR, FLG },
- { ACTION_PARENT, "ACTION_PARENT", LCK, 0, 0, 0, LCK },
- { ACTION_SET_PROTECT, "ACTION_SET_PROTECT", 0, LCK, STR, NUM, FLG },
- { ACTION_SET_COMMENT, "ACTION_SET_COMMENT", 0, LCK, STR, STR, FLG },
- { ACTION_SET_DATE, "ACTION_SET_DATE", LCK, BUF, 0, 0, FLG },
- { ACTION_CURRENT_VOLUME,"ACTION_CURRENT_VOLUME", 0, 0, 0, 0, VOL },
- { ACTION_INFO, "ACTION_INFO", LCK, INF, 0, 0, FLG },
- { ACTION_DISK_INFO, "ACTION_DISK_INFO", INF, 0, 0, 0, FLG },
- { ACTION_RENAME_DISK, "ACTION_RENAME_DISK", STR, 0, 0, 0, FLG },
- { ACTION_DIE, "ACTION_DIE", 0, 0, 0, 0, FLG },
- { ACTION_FLUSH, "ACTION_FLUSH", 0, 0, 0, 0, FLG },
- { ACTION_MORE_CACHE, "ACTION_MORE_CACHE", NUM, 0, 0, 0, NUM },
- { ACTION_INHIBIT, "ACTION_INHIBIT", NUM, 0, 0, 0, FLG },
- { ACTION_WRITE_PROTECT, "ACTION_WRITE_PROTECT", FLG, NUM, 0, 0, FLG },
- { ACTION_NETWORK_HELLO, "ACTION_NETWORK_HELLO", STR, 0, 0, 0, FLG },
- { ACTION_HANDLER_DEBUG, "ACTION_HANDLER_DEBUG", NUM, 0, 0, 0, NUM },
- { ACTION_SET_TRANS, "ACTION_SET_TRANS", STR, NUM, 0, 0, FLG },
- { 0 } /* Last packet type is 0 */
- };
-
- char *typnames[] =
- {
- "<UNUSED> ",
- "STRING ",
- "BOOLEAN ",
- "FileLock ",
- "FileHandle ",
- "FileInfoBlock",
- "fh_Arg1 ",
- "InfoData ",
- "Integer ",
- "Volume Node ",
- "<BAD 10> ",
- "Data Buffer "
- };
-
- extern struct WBStartup *WBenchMsg;
-
- #define NOCONST 12345
-
- #define LASTACT ((sizeof(packets)/sizeof(struct packettype))-2)
- void main(argc, argv)
- int argc;
- char **argv;
- {
- struct IntuiMessage *message;
- int setconst;
- int run = 1;
- int select, newsel, len;
- struct Gadget *gad;
- struct Window *CurrentWindow;
-
- char *tmpchar;
- BPTR olddir;
-
- olddir = NULL;
- if(argc == 0)
- {
- /* Workbench startup */
- if(WBenchMsg->sm_ArgList->wa_Lock != NULL)
- olddir = CurrentDir(WBenchMsg->sm_ArgList->wa_Lock);
- else
- {
- BUG(1, ("pickpack: Wa_Lock is NULL\n"))
- }
- }
-
- #ifdef DEBUG
- if(argc>0 && argv[1][0] == '-' &&
- (argv[1][1] == 'd' || argv[1][1] == 'D'))
- {
- stcd_i(argv[1]+2, &debug);
- BUG(0, ("*** Debugging initialized at level %d\n", debug))
- argc--, argv++;
- }
- #endif
-
- if(argc>1) strcpy(DevNameSIBuff, argv[1]);
-
- if ((IntuitionBase = (struct IntuitionBase *)
- OpenLibrary("intuition.library", 0)) == NULL)
- {
- BUG(0, ("Can't open intuition.library\n"))
- exit(1);
- }
- if ((GfxBase = (struct GfxBase *)
- OpenLibrary("graphics.library", 0)) == NULL)
- {
- BUG(0, ("Can't open graphics.library\n"))
- exit(2);
- }
- if ((Window = OpenWindow(&NewWindowStructure1)) == NULL)
- {
- BUG(0, ("Can't open window\n"))
- exit(3);
- }
-
- /* Initialize the code to handle structure windows */
- InitST(Window->UserPort);
-
- SetDrMd(Window->RPort, JAM1);
-
- SetMenuStrip(Window, &Menu1);
-
- select = SEL_LOCK;
- CurrentWindow = NULL;
- setconst = NOCONST;
-
- while(run >= 0)
- {
- BUG(3, ("pickpack: Top of loop\n"))
- if (run)
- {
- memset(BufN, ' ', 24);
- len = strlen(packets[select].name);
- if (len > 23) len = 23;
- memcpy(BufN, packets[select].name, len);
- BufN[23] = 0;
- strcpy(Buf1, typnames[packets[select].arg1]);
- strcpy(Buf2, typnames[packets[select].arg2]);
- strcpy(Buf3, typnames[packets[select].arg3]);
- strcpy(Buf4, typnames[packets[select].arg4]);
- PrintIText(Window->RPort, &NameText, 0, 0);
- run = 0;
- }
-
- while((message = (struct IntuiMessage *) GetMsg(Window->UserPort)) == NULL)
- {
- /* No messages, it's safe to close windows */
- PurgeST();
- Wait(1 << Window->UserPort->mp_SigBit);
- }
-
- switch(message->Class)
- {
- case NEWSIZE:
- status("");
- BUG(2, ("Doing a newsize on the window %08lx\n", message->IDCMPWindow))
- MoveWind(message->IDCMPWindow, 0);
- break;
-
- case CLOSEWINDOW:
- status("");
- BUG(1, ("pickpack: shutting down\n"))
- if (message->IDCMPWindow == Window)
- run = -1;
- else
- {
- BUG(2, ("pickpack: Purge Item\n"))
- UnlinkST(message->IDCMPWindow);
- CurrentWindow = NULL;
- BUG(3, ("pickpack: Active window changed to 0x%08x\n", CurrentWindow))
- }
- setconst = NOCONST;
- break;
-
- case ACTIVEWINDOW:
- if (message->IDCMPWindow != Window)
- CurrentWindow = message->IDCMPWindow;
- BUG(3, ("pickpack: Active window changed to 0x%08x\n", CurrentWindow))
- break;
-
- case INACTIVEWINDOW:
- if (message->IDCMPWindow != Window)
- CurrentWindow = message->IDCMPWindow;
- BUG(3, ("pickpack: InActiveWindow to 0x%08x\n", message->IDCMPWindow))
- break;
-
- case MENUPICK:
- status("");
- if (message->Code == MENUNULL) break;
- newsel = menutrans[MENUNUM(message->Code)][ITEMNUM(message->Code)];
- BUG(9, ("pickpack: MENUNUM %d ITEMNUM %d newsel %d\n",
- MENUNUM(message->Code), ITEMNUM(message->Code), newsel))
- setconst = NOCONST;
- switch(newsel)
- {
- case 0:
- BUG(1, ("pickpack: 0 menu pick\n"))
- break;
-
- case SEL_HELP:
- goto DOHELP;
- break;
-
- case SEL_SEND:
- BUG(2, ("pickpack: Sending packet\n"))
- if(Sendit(select)) DisplayBeep(NULL);
- CurrentWindow = NULL;
- break;
-
- case SEL_HANDLE:
- BUG(2, ("pickpack: SEL_HANDLE menu pick\n"))
- CurrentWindow = AllocST(ST_HANDLE, NULL, 0);
- BUG(3, ("pickpack: Active window changed to 0x%08x\n", CurrentWindow))
- break;
-
- case SEL_FILEINFO:
- BUG(2, ("pickpack: SEL_FILEINFO menu pick\n"))
- CurrentWindow = AllocST(ST_FIB, NULL, 0);
- BUG(3, ("pickpack: Active window changed to 0x%08x\n", CurrentWindow))
- break;
-
- case SEL_INFODATA:
- BUG(2, ("pickpack: SEL_INFODATA menu pick\n"))
- CurrentWindow = AllocST(ST_INFO, NULL, 0);
- BUG(3, ("pickpack: Active window changed to 0x%08x\n", CurrentWindow))
- break;
-
- case SEL_BUFFER:
- BUG(2, ("pickpack: SEL_BUFFER menu pick\n"))
- reqinit();
- BUG(3, ("pickpack: Active window changed to 0x%08x\n", CurrentWindow))
- break;
-
- case SEL_QUIT:
- BUG(2, ("pickpack: SEL_QUIT menu pick\n"))
- run = -1;
- break;
-
- case SEL_MIN2:
- case SEL_MIN1:
- case SEL_ZERO:
- case SEL_ONE:
- setconst = newsel - SEL_ZERO;
- status("Select field to recieve constant value");
- break;
-
- default:
- BUG(2, ("pickpack: %d menu pick\n", newsel))
- select = newsel;
- run = 1;
- break;
- }
- BUG(3, ("pickpack: Menu end Active window changed to 0x%08x\n", CurrentWindow))
- CurrentWindow = NULL;
- break;
-
- case GADGETDOWN:
- case GADGETUP:
- status("");
- BUG(2, ("pickpack: GADGETDOWN/GADGETUP\n"))
- gad = (struct Gadget *)message->IAddress;
- switch(gad->GadgetID)
- {
- case GAD_BUFLEN:
- case GAD_BLOK:
- case GAD_BLCAN:
- len = reqkill();
- if(len > 0 && gad->GadgetID != GAD_BLCAN)
- CurrentWindow = AllocST(ST_DATA, NULL, len);
- break;
-
- case GAD_SEND:
- BUG(2, ("pickpack: Sending packet\n"))
- if(Sendit(select)) DisplayBeep(NULL);
- CurrentWindow = NULL;
- break;
-
- case GAD_ARG1:
- BUG(2, ("pickpack: Case GAD_ARG1\n"))
- setgad(&STR1, STR1SIBuff, packets[select].arg1,
- CurrentWindow, setconst);
- CurrentWindow = NULL;
- break;
-
- case GAD_ARG2:
- BUG(2, ("pickpack: Case GAD_ARG2\n"))
- setgad(&STR2, STR2SIBuff, packets[select].arg2,
- CurrentWindow, setconst);
- CurrentWindow = NULL;
- break;
-
- case GAD_ARG3:
- BUG(2, ("pickpack: Case GAD_ARG3\n"))
- setgad(&STR3, STR3SIBuff, packets[select].arg3,
- CurrentWindow, setconst);
- CurrentWindow = NULL;
- break;
-
- case GAD_ARG4:
- BUG(2, ("pickpack: Case GAD_ARG4\n"))
- setgad(&STR4, STR4SIBuff, packets[select].arg4,
- CurrentWindow, setconst);
- CurrentWindow = NULL;
- break;
-
- case GAD_PREV:
- BUG(2, ("pickpack: Case GAD_PREV\n"))
- select--;
- if (select < 1)
- select = LASTACT;
- run = 1;
- CurrentWindow = NULL;
- BUG(3, ("pickpack: prev: Active window changed to 0x%08x\n", CurrentWindow))
- break;
-
- case GAD_NEXT:
- BUG(2, ("pickpack: Case GAD_NEXT\n"))
- select++;
- if (select > LASTACT)
- select = 1;
- run = 1;
- BUG(3, ("pickpack: next: Active window changed to 0x%08x\n", CurrentWindow))
- CurrentWindow = NULL;
- break;
-
- case GAD_HANDLE:
- BUG(2, ("pickpack: GAD_HANDLE gadget pick\n"))
- CurrentWindow = AllocST(ST_HANDLE, NULL, 0);
- BUG(3, ("pickpack: Active window changed to 0x%08x\n", CurrentWindow))
- break;
-
- case GAD_FILEINFO:
- BUG(2, ("pickpack: GAD_FILEINFO gadget pick\n"))
- CurrentWindow = AllocST(ST_FIB, NULL, 0);
- BUG(3, ("pickpack: Active window changed to 0x%08x\n", CurrentWindow))
- break;
-
- case GAD_INFODATA:
- BUG(2, ("pickpack: GAD_INFODATA gadget pick\n"))
- CurrentWindow = AllocST(ST_INFO, NULL, 0);
- BUG(3, ("pickpack: Active window changed to 0x%08x\n", CurrentWindow))
- break;
-
- case GAD_BUFFER:
- BUG(2, ("pickpack: GAD_BUFFER gadget pick\n"))
- reqinit();
- BUG(3, ("pickpack: Active window changed to 0x%08x\n", CurrentWindow))
- break;
- #ifdef DEBUG
- case GAD_DEBUG:
- debug = atoi(DBGVALSIBuff);
- BUG(1, ("Debugging set to level %d\n", debug))
- break;
- #endif
- case GAD_UP:
- case GAD_DOWN:
- case GAD_SLIDER:
- BUG(2, ("Doing a move on the window %08lx\n", message->IDCMPWindow))
- MoveWind(message->IDCMPWindow, GAD_SLIDER-gad->GadgetID);
- break;
-
- default:
- BUG(2, ("pickpack: default gadget\n"))
- CurrentWindow = NULL;
- BUG(3, ("pickpack: default: Active window changed to 0x%08x\n", CurrentWindow))
- break;
-
- }
- setconst = NOCONST;
- break;
-
- case SELECTUP:
- case MOUSEBUTTONS:
- BUG(2, ("pickpack: SELECTUP/MOUSEBUTTONS\n"))
- break; /* Don't change the status() message */
-
- case RAWKEY:
- BUG(2, ("pickpack: RAWKEY\n"))
- status("");
- if (message->Code == 0x5f || /* Help Key */
- message->Code == 0x3a || /* / ? key */
- message->Code == 0x25) /* h key */
- {
- DOHELP:
- BUG(3, ("pickpack: HELP requested\n"))
- if(GetHelp(&tmpchar, &len) ||
- AllocST(ST_VIEW, (APTR)tmpchar, len))
- {
- BUG(1, ("pickpack: There's no help for you!\n"))
- }
-
- }
- CurrentWindow = NULL;
- break;
-
- default:
- BUG(2, ("pickpack: Unknown IntuiMessage\n"))
- CurrentWindow = NULL;
- break;
- }
- ReplyMsg((struct Message *)message);
- }
- TermST();
-
- if(olddir) CurrentDir(olddir);
-
- ClearMenuStrip(Window);
- CloseWindow(Window);
- CloseLibrary(IntuitionBase);
- CloseLibrary(GfxBase);
- exit(0);
- }
-
- static void setgad(gad, buf, type, wind, val)
- struct Gadget *gad;
- char *buf;
- int type;
- struct Window *wind;
- int val;
- {
- if (val != NOCONST)
- {
- /* We have a pending constant to deal with */
- switch(type)
- {
- case FLG:
- if (val == 0) strcpy(buf, "DOSTRUE");
- else if (val == -1) strcpy(buf, "DOSFALSE");
- else
- {
- DisplayBeep(NULL);
- status("Invalid flag value");
- return;
- }
- break;
- case LCK:
- if (val != 0)
- {
- DisplayBeep(NULL);
- status("Invalid lock value");
- return;
- }
- /* Fall through to the num */
- case NUM:
- sprintf(buf, "%d", val);
- break;
- default:
- status("Numeric argument not allowed");
- DisplayBeep(NULL);
- return;
- }
- }
- else if (wind != NULL)
- {
- switch(type)
- {
- case LCK:
- case HAN:
- case FIB:
- case AG1:
- case INF:
- case VOL:
- case BUF:
- strcpy(buf, wind->Title);
- break;
-
- case NUM:
- sprintf(buf, "%d", WindSize(wind));
- break;
-
- default:
- status("Window argument not allowed");
- DisplayBeep(NULL);
- break;
- }
- }
-
- else
- {
- status("No argument pending for field");
- return;
- }
-
- RefreshGList(gad, Window, NULL, 1);
- }
-
- #define FNLEN 101
- static int fnused;
- static char fn1[FNLEN], fn2[FNLEN];
-
- static int Sendit(select)
- int select;
- {
- int rc;
- struct MsgPort *pid;
- char buf[100];
- LONG args[8];
- LONG res[2];
- BUG(1,("Sendit: Entry, select %d device '%s'\n", select, DevNameSIBuff))
-
- pid = DeviceProc(DevNameSIBuff);
- if(!pid)
- {
- BUG(1, ("Sendit: Exit, no such device\n"))
- sprintf(buf, "Unknown device '%s'", DevNameSIBuff);
- status(buf);
- return(RC_ERRNODEVICE);
- }
-
- fnused = 0;
-
- if (rc=GetArg(packets[select].arg1, args, STR1SIBuff))
- {
- status("Invalid value for dp_Arg1");
- return(rc);
- }
- if (rc=GetArg(packets[select].arg2, args+1, STR2SIBuff))
- {
- status("Invalid value for dp_Arg2");
- return(rc);
- }
- if (rc=GetArg(packets[select].arg3, args+2, STR3SIBuff))
- {
- status("Invalid value for dp_Arg3");
- return(rc);
- }
- if (rc=GetArg(packets[select].arg4, args+3, STR4SIBuff))
- {
- status("Invalid value for dp_Arg4");
- return(rc);
- }
-
- sendpkt(pid, packets[select].number, args, 4, res);
-
- BUG(1, ("Sendit: Sendpkt returned %ld, %ld\n", res[0], res[1]))
-
- PutRes(packets[select].res1, res[0], RES1LINE, pid);
- PutRes(RCNUM, res[1], RES2LINE, pid);
-
- switch(packets[select].number)
- {
- case ACTION_FREE_LOCK:
- {
- struct Window *tmpw;
- tmpw = STToWind(BADDR(args[0]));
- NameST(tmpw, NULL, NULL);
- UnlinkST(tmpw);
- break;
- }
-
- case ACTION_END:
- NameST(STToWind((APTR)args[0]), NULL, NULL);
- break;
-
- case ACTION_FINDINPUT:
- case ACTION_FINDOUTPUT:
- case ACTION_FINDUPDATE:
- if(res[0] == DOSTRUE)
- NameST(STToWind(BADDR(args[0])), STR3SIBuff, pid);
- break;
-
- case ACTION_DISK_INFO:
- DisplayST(STToWind(BADDR(args[0])));
- break;
-
- case ACTION_EXAMINE_OBJECT:
- case ACTION_EXAMINE_NEXT:
- case ACTION_INFO:
- DisplayST(STToWind(BADDR(args[1])));
- break;
-
- case ACTION_READ:
- case ACTION_WRITE:
- DisplayST(STToWind(BADDR(args[0])));
- DisplayST(STToWind((APTR)args[1]));
- break;
- }
-
- return(RC_OK);
- }
-
- static struct IntuiText ResText = {
- 1,0,JAM2, /* front and back text pens, drawmode and fill byte */
- 0,0, /* XY origin relative to container TopLeft */
- &TOPAZ80, /* font pointer or NULL for default */
- NULL, /* pointer to text */
- NULL /* next IntuiText structure */
- };
-
-
- static int PutRes(vtype, res, top, pid)
- int vtype;
- LONG res;
- int top;
- struct MsgPort *pid;
- {
- int rc;
- struct Window *w;
- char data[100];
-
- BUG(1, ("PutRes: Entry, vtype %d\n"))
-
- ResText.IText = data;
- ResText.FrontPen = 1;
- ResText.BackPen = 0;
- memset(data, ' ', 50);
- rc = RC_OK;
- switch(vtype)
- {
- case 0:
- break;
-
- case FLG:
- if(res == DOSFALSE) strcpy(data, "DOSFALSE");
- else if(res == DOSTRUE) strcpy(data, "DOSTRUE");
- else sprintf(data, "??? %ld ???", res);
- break;
-
- case LCK:
- if(res)
- {
- if(AllocST(ST_LOCK, BADDR(res), 0))
- {
- w = STToWind(BADDR(res));
- strcpy(data, w->Title);
- NameST(w, fn1+1, pid);
- }
- }
- else
- {
- strcpy(data, "NULL");
- }
- break;
-
- case RCNUM:
- sprintf(data, "RC %ld - ", res);
- switch(res)
- {
- case 103: strcat(data, "insufficient free store"); break;
- case 105: strcat(data, "task table full!"); break;
- case 120: strcat(data, "argument line invalid or too long"); break;
- case 121: strcat(data, "file is not an object module"); break;
- case 122: strcat(data, "invalid resident library during load"); break;
- case 202: strcat(data, "object in use"); break;
- case 203: strcat(data, "object already exists"); break;
- case 204: strcat(data, "directory not found"); break;
- case 205: strcat(data, "object not found"); break;
- case 206: strcat(data, "invalid window description"); break;
- case 209: strcat(data, "packet request type unknown"); break;
- case 210: strcat(data, "stream name component invalid"); break;
- case 211: strcat(data, "invalid object lock"); break;
- case 212: strcat(data, "object not of required type"); break;
- case 213: strcat(data, "disk not validated"); break;
- case 214: strcat(data, "disk write-protected"); break;
- case 215: strcat(data, "rename across devices attempted"); break;
- case 216: strcat(data, "directory not empty"); break;
- case 218: strcat(data, "device (or volume) not mounted"); break;
- case 219: strcat(data, "seek failure"); break;
- case 220: strcat(data, "comment too big"); break;
- case 221: strcat(data, "disk full"); break;
- case 222: strcat(data, "file is protected from deletion"); break;
- case 223: strcat(data, "file is write protected"); break;
- case 224: strcat(data, "file is read protected"); break;
- case 225: strcat(data, "not a valid DOS disk"); break;
- case 226: strcat(data, "no disk in drive"); break;
- case 232: strcat(data, "no more entries in directory"); break;
- case 0: break;
- default: strcat(data, "???????"); break;
- }
- break;
-
- case NUM:
- sprintf(data, "%ld", res);
- break;
-
- case VOL:
- rc = RC_ERRBADDATA;
- break;
-
- default:
- rc = RC_ERRBADDATA;
- break;
- }
-
- if(rc == RC_OK)
- {
- data[strlen(data)] = ' ';
- data[42] = 0;
- PrintIText(Window->RPort, &ResText, 80, top);
- BUG(1, ("PutRes: Data value is %s\n", data))
- }
- #ifdef DEBUG
- else
- BUG(1, ("PutRes: Bad RC %d\n", rc))
- #endif
-
- return(rc);
- }
-
- void status(msg)
- char *msg;
- {
- char data[100];
- int len;
-
- len = strlen(msg);
- memset(data, ' ', 50);
- if (len > 50) len = 50;
- memcpy(data, msg, len);
- data[50] = 0;
- ResText.FrontPen = 0;
- ResText.BackPen = (len == 0 ? 0 : 1);
- ResText.IText = data;
- PrintIText(Window->RPort, &ResText, 19, 148);
- }
-
- static int GetArg(vtype, arg, data)
- int vtype;
- LONG *arg;
- char *data;
- {
- int rc;
- unsigned char *tmpchar;
- APTR v;
-
- BUG(1, ("GetArg: Entry, vtype %d data %s\n", vtype, data))
-
- *arg = 0;
-
- rc = RC_OK;
- switch(abs(vtype))
- {
- case 0:
- break;
-
- case STR:
- tmpchar = (unsigned char *)(fnused ? fn2 : fn1);
- strcpy(tmpchar+1, data);
- tmpchar[0] = strlen(data);
- *arg = MKBADDR(tmpchar);
- break;
-
- case FLG:
- if(stricmp(data, "DOSTRUE")) *arg = DOSTRUE;
- else if(stricmp(data, "DOSFALSE")) *arg = DOSFALSE;
- else rc = RC_ERRBADDATA;
- break;
-
- case LCK:
- if(data[0] == '0' || data[0] == '\0')
- {
- *arg = NULL;
- break;
- }
- v = FindST(data, ST_LOCK);
- if(!v) rc = RC_ERRBADDATA;
- else *arg = (LONG)MKBADDR(v);
- break;
-
- case HAN:
- v = FindST(data, ST_HANDLE);
- if(!v) rc = RC_ERRBADDATA;
- else *arg = (LONG)MKBADDR(v);
- break;
-
- case FIB:
- v = FindST(data, ST_FIB);
- if(!v) rc = RC_ERRBADDATA;
- else *arg = (LONG)MKBADDR(v);
- break;
-
- case AG1:
- v = FindST(data, ST_HANDLE);
- if(!v) rc = RC_ERRBADDATA;
- else *arg = (LONG)((struct FileHandle *)v)->fh_Arg1;
- break;
-
- case INF:
- v = FindST(data, ST_INFO);
- if(!v) rc = RC_ERRBADDATA;
- else *arg = (LONG)MKBADDR(v);
- break;
-
- case NUM:
- stcd_l(data, arg);
- break;
-
- case VOL:
- rc = RC_ERRBADDATA;
- break;
-
- case BUF:
- v = FindST(data, ST_DATA);
- if(!v) rc = RC_ERRBADDATA;
- else *arg = (LONG)v;
- break;
-
- default:
- rc = RC_ERRBADDATA;
- break;
- }
-
- #ifdef DEBUG
- if(rc)
- BUG(1, ("GetArg: Bad RC %d\n", rc))
- else
- BUG(1, ("GetArg: arg %d (0x%08x)\n", *arg, *arg))
- #endif
-
- return(rc);
- }