home *** CD-ROM | disk | FTP | other *** search
- /*
- * Misc.c - Copyright © 1991 by S.R. & P.C.
- *
- * Created: 04 Apr 1991 17:39:43
- * Modified: 03 Jul 1991 21:17:21
- *
- * Make>> make
- */
-
- #include "ParMBase.h"
-
- extern struct ExecBase *SysBase;
-
- static char *StrErr[] = {
- "No default dir",
- "Object in use",
- "Object already exists",
- "Directory not found",
- "Object not found",
- "Bad stream name",
- "Object too large",
- "Unknown error",
- "Unknown action",
- "Stream name component invalid",
- "Invalid lock",
- "Wrong object type",
- "Disk not validated",
- "Disk write protected",
- "Attempt to rename across devices",
- "Directory not empty",
- "Too many levels",
- "Device not mounted",
- "Seek error",
- "Comment too big",
- "Disk full",
- "Object delete protected",
- "Object write protected",
- "Object read protected",
- "Not a dos disk",
- "No disk in drive"
- };
-
-
- /* Warn user of a load error */
-
- char *DosError(long err)
- {
- char *str;
- short e = (short)err;
-
- switch(e) {
- case 0:
- str = "Error 0, no error!";
- break;
- case ERROR_NO_FREE_STORE:
- str = "Not enough memory";
- break;
- case ERROR_TASK_TABLE_FULL:
- str = "Task table full";
- break;
- case ERROR_LINE_TOO_LONG:
- str = "Line too long";
- break;
- case ERROR_FILE_NOT_OBJECT:
- str = "File is not an object module";
- break;
- case ERROR_INVALID_RESIDENT_LIBRARY:
- str = "Invalid resident library";
- break;
- default:
- if (e>=201 && e<=226)
- str = StrErr[e-201];
- else
- str = "Unknown error";
- }
- return str;
- }
-
-
- char *StrIoErr(void)
- {
- return DosError(IoErr());
- }
-
-
- /***** make (and allocate) a copy of the passed string *****/
-
- char *CopyStr(char *str)
- {
- struct ParMBase *ParMBase;
- char *newstr;
-
- if (newstr = AllocMem(strlen(str)+1, MEMF_PUBLIC))
- strcpy(newstr, str);
- return newstr;
- }
-
-
- void FreeStr(char *str)
- {
- struct ParMBase *ParMBase;
-
- if (str)
- FreeMem(str, strlen(str)+1);
- }
-
-
- void NewMinList(struct MinList *MinList)
- {
- struct ParMBase *ParMBase;
-
- MinList->mlh_Head = (struct MinNode *)&MinList->mlh_Tail;
- MinList->mlh_Tail = NULL;
- MinList->mlh_TailPred = (struct MinNode *)MinList;
- }
-
-
- ULONG MakeMenuShortCut(struct Menu *M, ULONG c)
- {
- struct ParMBase *ParMBase;
- struct MenuItem *MI, *SI;
- short menu, item, sub;
- USHORT Code;
-
- c = Toupper(c);
- for( menu=0 ; M ; M=M->NextMenu, menu++ ) {
- for( MI=M->FirstItem, item=0 ; MI ; MI=MI->NextItem, item++ ) {
- if (SI=MI->SubItem) {
- for( sub=0 ; SI ; SI=SI->NextItem, sub++ ) {
- if ((SI->Flags & COMMSEQ) && c == Toupper(SI->Command)) {
- SI->NextSelect = MENUNULL;
- return (sub<<11)|(item<<5)|menu;
- }
- }
- }
- else if ((MI->Flags & COMMSEQ) && c == Toupper(MI->Command)) {
- MI->NextSelect = MENUNULL;
- return (NOSUB<<11)|(item<<5)|menu;
- }
- }
- }
- return MENUNULL;
- }
-
-
- void InitDefaults(struct ParMConfig *PCfg)
- {
- struct ParMBase *ParMBase;
-
- strcpy(PCfg->CmdWindow, DEFAULT_CMD_WINDOW);
- strcpy(PCfg->ShellWindow, DEFAULT_SHELL_WINDOW);
- strcpy(PCfg->ShellCmd, DEFAULT_SHELL_CMD);
- strcpy(PCfg->WaitCmd, DEFAULT_WAIT_CMD);
- strcpy(PCfg->TmpDir, DEFAULT_TMP_DIR);
- PCfg->DefaultStack = 4000;
- }
-
-
- /* See if some wb messages have been replied, and free them */
-
- void FreeRepliedWBMessages(void)
- {
- struct ParMBase *ParMBase;
- struct Extended_WBStartup *EWBS;
-
- Forbid();
- while(EWBS = (struct Extended_WBStartup *)GetMsg(&ParMBase->pb_MsgPort)) {
- ParMBase->pb_MsgCnt--;
- WBFree(EWBS);
- }
- Permit();
- }
-
-
- long IsHidden(struct Window *W)
- {
- long Hidden = FALSE;
- struct Layer *L1, *L2;
-
- LockLayerInfo(&W->WScreen->LayerInfo);
- L1 = WhichLayer(&W->WScreen->LayerInfo, W->LeftEdge, W->TopEdge);
- L2 = WhichLayer(&W->WScreen->LayerInfo, W->LeftEdge + W->Width-1, W->TopEdge + W->Height-1);
- if (W != (struct Window *)L1->Window || W != (struct Window *)L2->Window)
- Hidden = TRUE;
- UnlockLayerInfo(&W->WScreen->LayerInfo);
- return Hidden;
- }
-
-
- /***** get CLI window ptr *****/
-
- struct Window *GetWindow(void)
- {
- struct Process *pp;
- struct InfoData *infodata;
- struct Window *win;
- long args[7];
-
- pp = (struct Process *)SysBase->ThisTask;
- infodata = AllocMem((long) sizeof(struct InfoData), MEMF_CLEAR | MEMF_PUBLIC);
- args[0] = (long)infodata >> 2;
- SendPacket(ACTION_DISK_INFO, args, (struct MsgPort *)pp->pr_ConsoleTask);
- win = (struct Window *)infodata->id_VolumeNode;
- FreeMem(infodata, (long)sizeof(struct InfoData));
- return win;
- }
-
-
- struct IORequest *CreateExtIO(struct MsgPort *ioReplyPort, long size)
- {
- struct IORequest *ioReq;
-
- if (ioReq = AllocMem(size, MEMF_PUBLIC|MEMF_CLEAR)) {
- ioReq->io_Message.mn_Node.ln_Type = NT_MESSAGE;
- ioReq->io_Message.mn_Length = size;
- ioReq->io_Message.mn_ReplyPort = ioReplyPort;
- }
- return ioReq;
- }
-
-
-