home *** CD-ROM | disk | FTP | other *** search
-
- /* Menu.c menu structures and routines referred to in menus */
-
- #include <libraries/asl.h>
- #include <utility/tagitem.h>
- #include <dos/dos.h>
- #include <exec/memory.h>
- #include <intuition/intuition.h>
- #include <libraries/gadtools.h>
- #include <clib/intuition_protos.h>
- #include <clib/gadtools_protos.h>
-
- extern struct Library *AslBase;
- extern struct TextAttr Style;
- extern struct Window *Window;
- extern struct StringInfo Block_info;
- extern int drive;
- extern UBYTE *BB, *RB;
-
- /* Menu ID's */
- #define m_file 0
- #define m_sector 1
- #define m_buffer 2
- #define m_search 3
-
- struct NewMenu My_NewMenu[] =
- {
- { NM_TITLE, "Project", 0 , 0, 0, 0,},
- { NM_ITEM, "About", 0 , 0, 0, 0,},
- { NM_ITEM, "Quit", "Q", 0, 0, 0,},
- { NM_TITLE, "Sector", 0 , 0, 0, 0,},
- { NM_ITEM, "Read again", "R", 0, 0, 0,},
- { NM_ITEM, "Write back", "W", 0, 0, 0,},
- { NM_ITEM, "Load from file", "L", 0, 0, 0,},
- { NM_ITEM, "Save as file", "S", 0, 0, 0,},
- { NM_ITEM, "Calc Checksum", "C", 0, 0, 0,},
- { NM_TITLE, "Buffer", 0 , 0, 0, 0,},
- { NM_ITEM, "Read from buffer", 0 , 0, 0, 0,},
- { NM_ITEM, "Write to buffer", 0 , 0, 0, 0,},
- { NM_TITLE, "Search", 0 , 0, 0, 0,},
- { NM_ITEM, "Search string", 0 , 0, 0, 0,},
- { NM_ITEM, "Search number", 0 , 0, 0, 0,},
- { NM_END, NULL, 0 , 0, 0, 0,},
- };
-
- struct TagItem TIA[] =
- {
- ASL_OKText, NULL, ASL_TopEdge, 40, ASL_LeftEdge, 50, ASL_Height, 140,
- ASL_Width, 156, TAG_END, 0
- };
-
- int GetName(headertext, string)
- char headertext[];
- char string[];
- {
- int i, j;
- char *FN, *DN;
- struct FileRequester *FR;
- int rc;
-
- if ((AslBase = (struct Library *) OpenLibrary(AslName, 0L)))
- {
- TIA[0].ti_Data = (ULONG) headertext;
- FR = (struct FileRequester *) AllocAslRequest(ASL_FileRequest, TIA);
- FN = (char *) RequestFile(FR);
- DN = FR->rf_Dir;
- if (FN)
- {
- for (i = 0; DN[i] != 0; i++) string[i] = DN[i];
- if ((i != 0) && (DN[i-1] != ':')) string[i++] = '/';
- for (j = 0; FN[j] != 0; j++) string[i+j] = FN[j];
- string[i+j] = 0;
- rc = i+j;
- }
- else rc = 0;
- FreeFileRequest(FR);
- }
- else
- {
- ShowText2(Window, "asl.library not found.", "Load/Save aborted", NULL);
- rc = 0;
- }
- return(rc);
- }
-
- void LoadBlock(buffer)
- UBYTE *buffer;
- {
- char Filename[256];
- struct Filehandle *f;
- LONG br;
-
- if (GetName("Load", Filename))
- {
- f = (struct Filehandle *) Open(Filename, MODE_OLDFILE);
- if (!f) ShowText2(Window, "Error opening file", "Load aborted", NULL);
- else
- {
- if ((br = Read(f, buffer, 512L)) != 512L)
- ShowText2(Window, "Not a full block loaded", NULL, NULL);
- Close(f);
- UpDateSB();
- }
- }
- }
-
- void SaveBlock(buffer)
- UBYTE *buffer;
- {
- char Filename[256];
- struct Filehandle *f;
- LONG bw;
-
- if (GetName("Save", Filename))
- {
- f = (struct Filehandle *) Open(Filename, MODE_NEWFILE);
- if (!f) ShowText2(Window, "Error opening file", "Save aborted", NULL);
- else
- {
- if ((bw = Write(f, buffer, 512L)) != 512L)
- ShowText2(Window, "Error writing data",
- "Check disk and try again", NULL);
- else ShowText2(Window, "Block saved.", NULL, NULL);
- Close(f);
- }
- }
- }
-
- void CalcCheck(buffer)
- LONG *buffer;
- {
- int i;
- LONG L;
-
- buffer[5] = 0;
- L = 0;
- for (i = 0; i < 128; i++) L += buffer[i];
- buffer[5] = -L;
- UpDateSB();
- }
-
- BOOL DoMenu(menu, item, sub)
- UWORD menu, item, sub;
- {
- int i, td_err;
- BOOL rc = TRUE;
-
- switch(menu)
- {
- case m_file:
- switch(item)
- {
- case 0: /* About */
- ShowText2(Window, "TrackEd v1.24 21-may-93",
- "by Camiel Rouweler", "Thank you");
- break;
-
- case 1: /* Quit */
- rc = FALSE;
- break;
- }
- break;
-
- case m_buffer:
- switch(item)
- {
- case 0: /* read from buffer */
- for (i = 0; i < 512; i++) BB[i] = RB[i];
- UpDateSB();
- break;
-
- case 1: /* write to buffer */
- for (i = 0; i < 512; i++) RB[i] = BB[i];
- break;
- }
- break;
-
- case m_sector:
- switch(item)
- {
- case 0: /* Re-read */
- td_err = ReadBlocks(drive, (WORD) Block_info.LongInt, 1, BB);
- if (td_err) ProcessTDError(td_err);
- UpDateSB();
- break;
-
- case 1: /* Write back */
- td_err = WriteBlocks(drive, (WORD) Block_info.LongInt, 1, BB);
- if (td_err) ProcessTDError(td_err);
- UpDateSB();
- break;
-
- case 2: /* Load Block */
- LoadBlock(BB);
- break;
-
- case 3: /* Save Block */
- SaveBlock(BB);
- break;
-
- case 4: /* Calculate Checksum */
- CalcCheck(BB);
- break;
- }
- break;
-
- case m_search:
- switch(item)
- {
- case 0: /* Search String */
- SearchS();
- break;
-
- case 1: /* Search Number */
- SearchB();
- break;
- }
-
- break;
- }
- return(rc);
- }
-