home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- ** GALer.c
- *******************************************************************************
- **
- ** author: Christian Habermann, (c)1991-96 by Christian Habermann
- ** Asamstr. 17
- ** 85356 Freising
- ** Germany
- ** version: 2.0
- ** date: 07.02.1996
- **
- ** used compiler: SAS-C 6.51
- **
- *******************************************************************************
- **
- ** description:
- ** This is the software which is necessary to read/program GALs via
- ** GALer's hardware.
- **
- ** Both the hardware and the software of the GALer project are copyright
- ** by Christian Habermann.
- **
- *******************************************************************************
- **
- ** changes:
- ** date | author | comment
- ** | |
- ** | |
- ******************************************************************************/
-
-
-
-
-
-
- /********************************* includes **********************************/
-
-
- #define STRINGARRAY 1
-
- #include <libraries/mui.h>
-
- #include <devices/parallel.h>
- #include <exec/io.h>
- #include <exec/memory.h>
- #include <exec/ports.h>
- #include <exec/types.h>
- #include <exec/interrupts.h>
- #include <libraries/reqtools.h>
- #include <libraries/locale.h>
- #include <libraries/gadtools.h>
- #include <resources/misc.h>
- #include <resources/cia.h>
- #include <hardware/cia.h>
-
- #include <clib/alib_protos.h>
- #include <proto/asl.h>
- #include <proto/dos.h>
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/locale.h>
- #include <proto/muimaster.h>
- #include <proto/reqtools.h>
- #include <proto/misc.h>
- #include <proto/cia.h>
-
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
-
- #include "GALer.h"
- #include "Localize.h"
-
-
-
-
-
-
- /********************************** defines **********************************/
-
- #define REG(x) register __ ## x
- #define ASM __asm
- #define SAVEDS __saveds
-
- #ifndef MAKE_ID
- #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | \
- (ULONG) (c)<<8 | (ULONG) (d))
- #endif
-
-
- #define ciaa (*((struct CIA *)0xbfe001))
- #define ciab (*((struct CIA *)0xbfd000))
-
-
- #define HELP_FILE "PROGDIR:Doc/GALer.guide"
-
-
-
-
-
- /******************************** functions **********************************/
-
- #ifdef LATTICE
- int CXBRK(void) { return(0); } /* disable Lattice CTRL/C handling */
- int chkabort(void) { return(0); } /* really */
- #endif
-
-
- static void ExecuteMenu(int menu_id);
- static int GetParPort(void);
- static void FreeParPort(void);
- static int GetCIATimer(void);
- static void FreeCIATimer(void);
- static void dummy_interrupt(void);
- static int GetTimer(void);
- static void FreeTimer(void);
- static int OpenStuff(void);
- static void CloseStuff(void);
-
- void main(void);
-
-
-
-
-
-
- /******************************** variables **********************************/
-
- extern struct ReqFileRequester MyFileReqStruct;
-
- extern struct NewGadget WriteNGad[], JEDNGad[], AsmNGad[], OptNGad[];
- extern struct NewGadget RAsm16NGad[], RAsm20NGad[], SelectEditorNGad[];
-
- extern UWORD WriteGTypes[], JEDGTypes[], AsmGTypes[], OptGTypes[];
- extern UWORD RAsm16GTypes[], RAsm20GTypes[], SelectEditorGTypes[];
-
- extern ULONG WriteGTags[], JEDGTags[], AsmGTags[], OptGTags[];
- extern ULONG RAsm16GTags[], RAsm20GTags[], SelectEditorGTags[];
-
- extern struct SysBase *SysBase; /* let the compiler's autoinit */
- extern struct GfxBase *GfxBase; /* and autotermination code */
- extern struct IntuitionBase *IntuitionBase; /* open/close this libraries */
-
- extern int GALType, MaxFuseAdr, SigAdr, hw_version;
-
- extern struct Configuration Config;
-
- extern char *cia_timer_low, *cia_timer_high, *cia_timer_cr;
-
- extern char cia_timer_start, cia_timer_stop;
-
-
-
- struct IORequest *CreateExtIO();
- struct Library *MUIMasterBase;
- struct Library *LocaleBase;
- struct Library *MiscBase;
- struct Library *CIABase;
- struct ReqToolsBase *ReqToolsBase;
- struct MsgPort *timeport;
- struct timerequest *timereq;
- struct rtFileRequester *filereq;
-
- struct Catalog *catalog;
-
-
-
- static struct Interrupt CIATimerInterrupt =
- {{0, 0, NT_INTERRUPT, 0, "GALer"}, NULL, &dummy_interrupt};
-
-
-
- struct NewMenu MainMenu[] =
- {
- /* Project menu */
- NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_PROJECT,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_ABOUT,
- NM_ITEM, NULL, NULL, 0, NULL, (APTR)MEN_HARDVER,
- NM_SUB, (STRPTR)"V1.0, V1.1", NULL, CHECKIT, 14L, (APTR)MEN_VER11,
- NM_SUB, (STRPTR)"V1.2", NULL, CHECKIT, 13L, (APTR)MEN_VER12,
- NM_SUB, (STRPTR)"V1.3", NULL, CHECKIT, 11L, (APTR)MEN_VER13,
-
- /* support of elektor's GAL programming device is prepared
- to implement it, add the following line to the source code
- and adjust the menu localisation in the file Localize.c
- NOTE: only the second version of elektor's device is supported !!!
-
- NM_SUB, (STRPTR)"elektor II", NULL, CHECKIT, 7L, (APTR)MEN_VERELEKTOR,
- */
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_SAVECONFIG,
- NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_QUIT,
-
- /* GAL-Type menu */
- NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_GALTYPE,
- NM_ITEM, NULL, NULL, CHECKIT, 14L, (APTR)MEN_16V8,
- NM_ITEM, NULL, NULL, CHECKIT, 13L, (APTR)MEN_20V8,
- NM_ITEM, NULL, NULL, CHECKIT, 11L, (APTR)MEN_22V10,
- NM_ITEM, NULL, NULL, CHECKIT, 7L, (APTR)MEN_20RA10,
- NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
- NM_ITEM, NULL, NULL, CHECKIT|MENUTOGGLE, 0L, (APTR)MEN_TYPEREQ,
-
-
- /* GAL menu */
- NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_GAL,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_PROG,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_COPY,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_ERASE,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_CMP,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_CLEAR,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_SETSEC,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_TESTSEC,
- NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_WRITE,
-
- /* GAL-Assembler menu */
- NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_GALASM,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_ASSEMBLE,
-
- /* GAL-Disassembler menu */
- NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_GALDIS,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_READSIG,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_READACW,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_READINFO,
- NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_READJED,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_READJEDPARA,
- NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_REASM,
-
- /* Tools menu */
- NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_TOOLS,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_SHOWPIN,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_CLEARPIN,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_CALLCHECKER,
- NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_OPTIMIZER,
- NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_EDIT,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_CALLEDIT,
- NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
- NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_HELP,
- NM_END, NULL, NULL, 0, 0L, NULL
- };
-
-
-
-
-
- static UBYTE prog_name[] = "GALer";
-
- static UBYTE version[] = "$VER: GALer V2.0 (17.04.96)";
-
-
- UBYTE main_win_title[] = "GALer V2.0 © 1996 by Christian Habermann GAL16V8 ";
-
-
- WORD selected_timer;
-
- int checker_mode;
-
- LONG __stack = 8192;
-
-
-
-
- APTR app, main_win;
-
-
- APTR menustrip, menu_project, menu_galtype, menu_gal, /* menu items */
- menu_asm, menu_galdis, menu_tools, menu_checker;
-
-
- APTR GAL_txt[34]; /* used to store pointers */
- /* to the GAL text fields */
-
- APTR GAL_gads[32]; /* used to store the pointers */
- /* to the GAL gadgets */
-
- APTR LV_text; /* list view for text outputs */
-
-
-
-
-
-
-
-
- void main(void)
- {
- ULONG signals, id;
-
-
- if (!OpenStuff()) /* open libs, windows... */
- {
- CloseStuff();
- exit(20);
- }
-
- /* parallel port free? */
-
- if (!GetParPort())
- {
- puts((char *)AppStrings[MSG_ERR_PARPORT].as_Str);
- CloseStuff();
- exit(20);
- }
-
-
- /* get any CIA timer */
- if (!GetCIATimer())
- {
- FreeParPort();
- puts((char *)AppStrings[MSG_ERR_CIATIMER].as_Str);
- CloseStuff();
- exit(20);
- }
- /* open timer device */
-
-
- if (!GetTimer())
- {
- FreeParPort();
- FreeCIATimer();
- puts((char *)AppStrings[MSG_ERR_TIMER].as_Str);
- CloseStuff();
- exit(20);
- }
-
-
-
-
- InitHardware(); /* init hardware */
- EnableOutput(); /* enable outputs */
-
- LoadConfig(); /* load configuration */
-
-
-
- for (;;)
- {
- id = DoMethod(app, MUIM_Application_Input, &signals);
-
- /* quit or window's close */
- /* gadget selected? */
- if (id == MEN_QUIT || id == MUIV_Application_ReturnID_Quit)
- {
- if (TxtRequest(AppStrings[MSG_ASKQUIT_TXT].as_Str,
- AppStrings[MSG_CONT_GAD].as_Str,
- AppStrings[MSG_CANCEL_GAD].as_Str))
- break;
- }
- /* gadget of the symbolic GAL */
- /* selected? */
- if (id >= FIRST_GAL_GADID &&
- id < FIRST_GAL_GADID + NUM_OF_GAL_GADGETS &&
- checker_mode == ON)
- Checker(id);
-
- /* menu selected? */
- if (id >= FIRST_MENU_ID && id <= LAST_MENU_ID)
- ExecuteMenu(id);
-
-
- if (signals)
- Wait(signals); /* wait for next event */
- }
-
-
-
- FreeParPort(); /* shut down */
-
- FreeCIATimer();
-
- FreeTimer();
-
- CloseStuff();
-
- exit(0);
- }
-
-
-
-
-
- /******************************************************************************
- ** ExecuteMenu()
- *******************************************************************************
- ** input: menu_id ID of the selected menu item
- **
- ** output: none
- **
- ** remarks: does execute the selected menu
- ******************************************************************************/
-
- static void ExecuteMenu(int menu_id)
- {
-
- switch (menu_id)
- {
- /* Project menu */
- case MEN_ABOUT: /* about */
- About();
- break;
- /* hardware versions */
- case MEN_VER11:
- DoMethod(main_win, MUIM_Window_SetMenuState, MEN_22V10, FALSE);
- DoMethod(main_win, MUIM_Window_SetMenuState, MEN_20RA10, FALSE);
-
- if (GALType == GAL22V10 || GALType == GAL20RA10)
- SetGALType(GAL16V8);
-
- Config.HardwareVersion = hw_version = HW_GALER_1_0;
- InitHardware();
- break;
-
- case MEN_VER12:
- DoMethod(main_win, MUIM_Window_SetMenuState, MEN_22V10, FALSE);
- DoMethod(main_win, MUIM_Window_SetMenuState, MEN_20RA10, FALSE);
-
- if (GALType == GAL22V10 || GALType == GAL20RA10)
- SetGALType(GAL16V8);
-
- Config.HardwareVersion = hw_version = HW_GALER_1_2;
- InitHardware();
- break;
-
- case MEN_VER13:
- DoMethod(main_win, MUIM_Window_SetMenuState, MEN_22V10, TRUE);
- DoMethod(main_win, MUIM_Window_SetMenuState, MEN_20RA10, TRUE);
-
- Config.HardwareVersion = hw_version = HW_GALER_1_3;
- InitHardware();
- break;
-
- case MEN_VERELEKTOR:
- DoMethod(main_win, MUIM_Window_SetMenuState, MEN_22V10, TRUE);
- DoMethod(main_win, MUIM_Window_SetMenuState, MEN_20RA10, TRUE);
- DoMethod(main_win, MUIM_Window_SetMenuState, MEN_CALLCHECKER, FALSE);
-
- Config.HardwareVersion = hw_version = HW_ELEKTOR_II;
- InitHardware();
- break;
-
- case MEN_SAVECONFIG: /* save configuration */
- SaveConfig();
- break;
- /* quit is dealed in */
- /* the main loop */
-
- /* GAL-type menu */
-
- case MEN_16V8: /* GAL16V8 */
- SetGALType(GAL16V8);
- break;
-
- case MEN_20V8: /* GAL20V8 */
- SetGALType(GAL20V8);
- break;
-
- case MEN_22V10: /* GAL22V10 */
- SetGALType(GAL22V10);
- break;
-
- case MEN_20RA10: /* GAL20RA10 */
- SetGALType(GAL20RA10);
- break;
-
- case MEN_TYPEREQ: /* type requester */
- Config.GALTypeReq = !Config.GALTypeReq;
- break;
-
-
- /* GAL menu */
- case MEN_PROG:
- ProgramGAL(); /* program GAL */
- break;
-
- case MEN_COPY: /* copy */
- CopyGAL();
- break;
-
- case MEN_ERASE: /* erase */
- Loeschen();
- break;
-
- case MEN_CMP: /* compare */
- Compare();
- break;
-
- case MEN_CLEAR: /* is GAL clear */
- Leertest();
- break;
-
- case MEN_SETSEC: /* set security bit */
- SetSecurity(YES);
- break;
-
- case MEN_TESTSEC: /* test security bit */
- TestSecurity();
- break;
-
- case MEN_WRITE: /* how to read/prog GALs */
- Schreibverhalten();
- break;
-
-
- /* GAL assembler menu */
- case MEN_ASSEMBLE:
- AssembleInputFile(ASSEMBLER); /* call assembler */
- break;
-
-
- /* GAL disassembler menu */
- case MEN_READSIG:
- PrintSignature(); /* print GAL's signature */
- break;
-
- case MEN_READACW: /* print ACW */
- PrintACW();
- break;
-
- case MEN_READINFO: /* print some infos */
- GALInfo(); /* about the GAL */
- break;
-
- case MEN_READJED: /* get JEDEC */
- PutJedec();
- break;
- /* parameters for getting JEDEC */
- case MEN_READJEDPARA:
- JedecRequester();
- break;
-
- case MEN_REASM: /* call reassembler */
- Reassembler();
- break;
-
-
- /* tools menu */
- case MEN_SHOWPIN:
- PrintPinNames(); /* show pin names */
- break;
-
- case MEN_CLEARPIN: /* clear pin names */
- ResetPinNames();
- break;
-
- case MEN_CALLCHECKER: /* switch GAL checker on */
- ToggleChecker();
- break;
-
- case MEN_OPTIMIZER: /* optimizer */
- Optimizer();
- break;
-
- case MEN_EDIT: /* select editor */
- SelectEditor();
- break;
-
- case MEN_CALLEDIT: /* call selected editor */
- CallEditor();
- break;
-
- case MEN_HELP: /* help */
- HelpOnHelp();
- break;
-
-
- /* GAL checker menu */
- case MEN_EXITCHECKER:
- ToggleChecker(); /* exit GAL checker */
- break;
-
- }
- }
-
-
-
-
-
- /******************************************************************************
- ** GetParPort()
- *******************************************************************************
- ** input: none
- **
- ** output: TRUE: ok
- ** FALSE: parallel port in use
- **
- ** remarks: allocate Amiga's parallel port
- ******************************************************************************/
-
- static int GetParPort(void)
- {
-
- /* get parallel port */
-
- if (!(MiscBase = (struct Library *)OpenResource(MISCNAME)))
- {
- return FALSE;
- }
-
-
- if (AllocMiscResource(MR_PARALLELPORT, prog_name))
- {
- return FALSE;
- }
-
-
- if (AllocMiscResource(MR_PARALLELBITS, prog_name))
- {
- FreeMiscResource(MR_PARALLELPORT);
- return FALSE;
- }
-
-
-
- InitParPort(); /* init data direction register */
-
- return TRUE;
- }
-
-
-
-
-
- /******************************************************************************
- ** FreeParPort()
- *******************************************************************************
- ** input: none
- ** output: none
- **
- ** remarks: free Amiga's parallel port
- ******************************************************************************/
-
- static void FreeParPort(void)
- {
-
- RestoreParPort(); /* restore the state of the */
- /* parallel port */
-
- FreeMiscResource(MR_PARALLELBITS); /* free parallel port */
- FreeMiscResource(MR_PARALLELPORT);
-
- }
-
-
-
-
-
- /******************************************************************************
- ** GetCIATimer()
- *******************************************************************************
- ** input: none
- ** output: TRUE: o.k.
- ** FALSE: failed to get any CIA timer
- **
- ** remarks: try to get one of the four CIA timers and initialize it
- ******************************************************************************/
-
- static int GetCIATimer(void)
- {
-
-
- /* at first try to get one of the CIA-A timers */
-
- if ((CIABase = (struct Library *)OpenResource(CIAANAME)))
- {
- /* try to get timer A */
- /* (interrupt is just a dummy) */
-
- if (!(AddICRVector(CIABase, CIAICRB_TA, &CIATimerInterrupt)))
- {
- AbleICR(CIABase, CIAICRB_TA); /* disable timer A interrupt */
-
- selected_timer = CIAICRB_TA;
-
- cia_timer_low = &ciaa.ciatalo; /* init some variables */
- cia_timer_high = &ciaa.ciatahi;
- cia_timer_cr = &ciaa.ciacra;
-
- cia_timer_start = ciaa.ciacra & (CIACRAF_SPMODE | CIACRAF_TODIN) |
- CIACRAF_START | CIACRAF_LOAD;
-
- cia_timer_stop = cia_timer_start & ~CIACRAF_START;
-
- return TRUE;
- }
- /* try to get timer B */
-
- if (!(AddICRVector(CIABase, CIAICRB_TB, &CIATimerInterrupt)))
- {
- AbleICR(CIABase, CIAICRB_TB); /* disable timer B interrupt */
-
- selected_timer = CIAICRB_TB;
-
- cia_timer_low = &ciaa.ciatblo; /* init some variables */
- cia_timer_high = &ciaa.ciatbhi;
- cia_timer_cr = &ciaa.ciacrb;
-
- cia_timer_start = ciaa.ciacrb & CIACRBF_ALARM |
- CIACRBF_START | CIACRBF_LOAD;
-
- cia_timer_stop = cia_timer_start & ~CIACRBF_START;
-
- return TRUE;
- }
-
- }
-
-
- /* now try to get one of the CIA-B timers */
-
- if ((CIABase = (struct Library *)OpenResource(CIABNAME)))
- {
- /* try to get timer A */
-
- if (!(AddICRVector(CIABase, CIAICRB_TA, &CIATimerInterrupt)))
- {
- AbleICR(CIABase, CIAICRB_TA); /* disable timer A interrupt */
-
- selected_timer = CIAICRB_TA;
-
- cia_timer_low = &ciab.ciatalo; /* init some variables */
- cia_timer_high = &ciab.ciatahi;
- cia_timer_cr = &ciab.ciacra;
-
- cia_timer_start = ciab.ciacra & (CIACRAF_SPMODE | CIACRAF_TODIN) |
- CIACRAF_START | CIACRAF_LOAD;
-
- cia_timer_stop = cia_timer_start & ~CIACRAF_START;
-
- return TRUE;
- }
- /* try to get timer B */
-
- if (!(AddICRVector(CIABase, CIAICRB_TB, &CIATimerInterrupt)))
- {
- AbleICR(CIABase, CIAICRB_TB); /* disable timer B interrupt */
-
- selected_timer = CIAICRB_TB;
-
- cia_timer_low = &ciab.ciatblo; /* init some variables */
- cia_timer_high = &ciab.ciatbhi;
- cia_timer_cr = &ciab.ciacrb;
-
- cia_timer_start = ciab.ciacrb & CIACRBF_ALARM |
- CIACRBF_START | CIACRBF_LOAD;
-
- cia_timer_stop = cia_timer_start & ~CIACRBF_START;
-
- return TRUE;
- }
-
- }
-
-
- return FALSE;
- }
-
-
-
-
-
- /******************************************************************************
- ** FreeCIATimer()
- *******************************************************************************
- ** input: none
- ** output: none
- **
- ** remarks: free CIA timer
- ******************************************************************************/
-
- static void FreeCIATimer(void)
- {
-
- RemICRVector(CIABase, selected_timer, &CIATimerInterrupt);
-
- }
-
-
-
-
-
- /******************************************************************************
- ** dummy_interrupt()
- *******************************************************************************
- ** input: none
- ** output: none
- **
- ** remarks: This is just a dummy function. It's needed for the interrupt
- ** structure necessary to test whether or not a CIA timer is free.
- ** __interrupt is a SAS-C keyword. This keyword turns off stack
- ** checking.
- ******************************************************************************/
-
- __interrupt static void dummy_interrupt(void)
- {
- return;
- }
-
-
-
-
-
- /******************************************************************************
- ** GetTimer()
- *******************************************************************************
- ** input: none
- **
- ** output: TRUE: ok
- ** FALSE: failed
- **
- ** remarks: open timer device
- ******************************************************************************/
-
- static int GetTimer(void)
- {
-
- timeport = (struct MsgPort *)CreatePort(0L, 0L);
-
- if (timeport == NULL)
- return FALSE;
-
-
- timereq = (struct timerequest *)AllocMem((long)sizeof(struct timerequest),
- MEMF_PUBLIC);
-
- if (timereq == NULL)
- {
- DeletePort(timeport);
- return FALSE;
- }
-
-
- timereq->tr_node.io_Message.mn_Node.ln_Type = NT_MESSAGE;
- timereq->tr_node.io_Message.mn_Node.ln_Pri = 0;
- timereq->tr_node.io_Message.mn_ReplyPort = timeport;
-
-
- if (OpenDevice(TIMERNAME, UNIT_MICROHZ, (struct IORequest *)timereq, 0L))
- {
- FreeMem(&timereq, (long)sizeof(struct timerequest));
- DeletePort (timeport);
- return FALSE;
- }
-
- return TRUE;
- }
-
-
-
-
-
- /******************************************************************************
- ** FreeTimer()
- *******************************************************************************
- ** input: none
- ** output: none
- **
- ** remarks: free the timer device
- ******************************************************************************/
-
- static void FreeTimer(void)
- {
-
- CloseDevice((struct IORequest *)timereq);
-
- FreeMem(timereq, (long)sizeof(struct timerequest));
-
- DeletePort(timeport);
- }
-
-
-
-
-
- /******************************************************************************
- ** OpenStuff()
- *******************************************************************************
- ** input: none
- **
- ** output: TRUE: ok
- ** FALSE: something failed
- **
- ** remarks: does open all libraries and the MUI application
- ******************************************************************************/
-
- static int OpenStuff(void)
- {
- int n;
- LONG open;
-
-
-
- if ((LocaleBase = OpenLibrary("locale.library", 38L)))
- catalog = OpenCatalog(NULL, (STRPTR)"GALer.catalog", OC_Version, 2,
- TAG_DONE);
-
- LocalizeText();
-
-
- if (!(ReqToolsBase = (struct ReqToolsBase *)OpenLibrary(REQTOOLSNAME,
- REQTOOLSVERSION)))
- {
- puts((char *)AppStrings[MSG_ERR_REQTOOLSLIB].as_Str);
- return FALSE;
- }
-
-
- if (!(filereq = rtAllocRequestA(RT_FILEREQ, NULL)))
- {
- puts((char *)AppStrings[MSG_ERR_FILEREQ].as_Str);
- return FALSE;
- }
-
-
- if (!(MUIMasterBase = OpenLibrary(MUIMASTER_NAME, MUIMASTER_VMIN)))
- {
- puts((char *)AppStrings[MSG_ERR_MUILIB].as_Str);
- return FALSE;
- }
-
-
-
- app = ApplicationObject,
- MUIA_Application_Title, "GALer",
- MUIA_Application_Version, "$VER: GALer 2.0 (05.04.1996)",
- MUIA_Application_Copyright, "©1991/96, Christian Habermann",
- MUIA_Application_Author, "Christian Habermann",
- MUIA_Application_Description, "Software to program GALs.",
- MUIA_Application_Base, "GALER",
- MUIA_Application_HelpFile, HELP_FILE,
-
- MUIA_Application_Menustrip, menustrip =
- MUI_MakeObject(MUIO_MenustripNM,
- MainMenu, 0),
-
- SubWindow, main_win = WindowObject,
- MUIA_Window_Title, main_win_title,
- MUIA_Window_ID, MAKE_ID('G','A','L','E'),
- MUIA_HelpNode, "Main",
-
- WindowContents, GroupObject,
-
- Child, ColGroup(6), GroupFrameT("GAL"),
- MUIA_Group_VertSpacing, 0,
-
- /* pins 1 and 24 */
- Child, GAL_gads[0] = SimpleButton("L"),
-
- Child, GAL_txt[0] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b1",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[23] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b24\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, HSpace(0),
-
- Child, HSpace(0),
-
- Child, HSpace(0),
-
-
- /* pins 2 and 23 */
- Child, GAL_gads[1] = SimpleButton("L"),
-
- Child, GAL_txt[1] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b2",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[22] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b23\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[33] = TextObject,
- MUIA_Background, MUII_TextBack, MUIA_Frame, MUIV_Frame_None,
- MUIA_Text_Contents, "Z",
- MUIA_Text_SetMin, TRUE,
- MUIA_Text_SetMax, TRUE,
- End,
-
- Child, GAL_gads[21] = SimpleButton("L"),
-
- Child, GAL_gads[31] = SimpleButton("O"),
-
-
- /* pins 3 and 22 */
- Child, GAL_gads[2] = SimpleButton("L"),
-
- Child, GAL_txt[2] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b3",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[21] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b22\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[32] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_None,
- MUIA_Text_Contents, "Z",
- MUIA_Text_SetMin, TRUE,
- MUIA_Text_SetMax, TRUE,
- End,
-
- Child, GAL_gads[20] = SimpleButton("L"),
-
- Child, GAL_gads[30] = SimpleButton("O"),
-
-
- /* pins 4 and 21 */
- Child, GAL_gads[3] = SimpleButton("L"),
-
- Child, GAL_txt[3] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b4",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[20] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b21\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[31] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_None,
- MUIA_Text_Contents, "Z",
- MUIA_Text_SetMin, TRUE,
- MUIA_Text_SetMax, TRUE,
- End,
-
- Child, GAL_gads[19] = SimpleButton("L"),
-
- Child, GAL_gads[29] = SimpleButton("O"),
-
-
- /* pins 5 and 20 */
- Child, GAL_gads[4] = SimpleButton("L"),
-
- Child, GAL_txt[4] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b5",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[19] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b20\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[30] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_None,
- MUIA_Text_Contents, "Z",
- MUIA_Text_SetMin, TRUE,
- MUIA_Text_SetMax, TRUE,
- End,
-
- Child, GAL_gads[18] = SimpleButton("L"),
-
- Child, GAL_gads[28] = SimpleButton("O"),
-
-
- /* pins 6 and 19 */
- Child, GAL_gads[5] = SimpleButton("L"),
-
- Child, GAL_txt[5] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b6",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[18] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b19\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[29] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_None,
- MUIA_Text_Contents, "Z",
- MUIA_Text_SetMin, TRUE,
- MUIA_Text_SetMax, TRUE,
- End,
-
- Child, GAL_gads[17] = SimpleButton("L"),
-
- Child, GAL_gads[27] = SimpleButton("O"),
-
-
- /* pins 7 and 18 */
- Child, GAL_gads[6] = SimpleButton("L"),
-
- Child, GAL_txt[6] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b7",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[17] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b18\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[28] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_None,
- MUIA_Text_Contents, "Z",
- MUIA_Text_SetMin, TRUE,
- MUIA_Text_SetMax, TRUE,
- End,
-
- Child, GAL_gads[16] = SimpleButton("L"),
-
- Child, GAL_gads[26] = SimpleButton("O"),
-
-
- /* pins 8 and 17 */
- Child, GAL_gads[7] = SimpleButton("L"),
-
- Child, GAL_txt[7] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b8",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[16] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b17\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[27] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_None,
- MUIA_Text_Contents, "Z",
- MUIA_Text_SetMin, TRUE,
- MUIA_Text_SetMax, TRUE,
- End,
-
- Child, GAL_gads[15] = SimpleButton("L"),
-
- Child, GAL_gads[25] = SimpleButton("O"),
-
-
- /* pins 9 and 16 */
- Child, GAL_gads[8] = SimpleButton("L"),
-
- Child, GAL_txt[8] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b9",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[15] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b16\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[26] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_None,
- MUIA_Text_Contents, "Z",
- MUIA_Text_SetMin, TRUE,
- MUIA_Text_SetMax, TRUE,
- End,
-
- Child, GAL_gads[14] = SimpleButton("L"),
-
- Child, GAL_gads[24] = SimpleButton("O"),
-
-
- /* pins 10 and 15 */
- Child, GAL_gads[9] = SimpleButton("L"),
-
- Child, GAL_txt[9] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b10",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[14] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b15\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[25] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_None,
- MUIA_Text_Contents, "Z",
- MUIA_Text_SetMin, TRUE,
- MUIA_Text_SetMax, TRUE,
- End,
-
- Child, GAL_gads[13] = SimpleButton("L"),
-
- Child, GAL_gads[23] = SimpleButton("O"),
-
-
- /* pins 11 and 14 */
- Child, GAL_gads[10] = SimpleButton("L"),
-
- Child, GAL_txt[10] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b11",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[13] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b14\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[24] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_None,
- MUIA_Text_Contents, "Z",
- MUIA_Text_SetMin, TRUE,
- MUIA_Text_SetMax, TRUE,
- End,
-
- Child, GAL_gads[12] = SimpleButton("L"),
-
- Child, GAL_gads[22] = SimpleButton("O"),
-
-
- /* pins 12 and 13 */
- Child, HSpace(0),
-
- Child, GAL_txt[11] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33rnoname \33b12",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, GAL_txt[12] = TextObject,
- MUIA_Background, MUII_TextBack,
- MUIA_Frame, MUIV_Frame_Text,
- MUIA_Text_Contents, "\33b13\33n noname",
- MUIA_Text_SetMin, TRUE,
- End,
-
- Child, HSpace(0),
-
- Child, GAL_gads[11] = SimpleButton("L"),
-
- Child, HSpace(0),
- End,
-
-
- Child, LV_text = ListviewObject,
- MUIA_Listview_Input, FALSE,
- MUIA_Listview_List, ListObject,
- MUIA_List_ConstructHook, MUIV_List_ConstructHook_String,
- MUIA_List_DestructHook, MUIV_List_DestructHook_String,
- ReadListFrame,
- End,
- End,
- End,
- End,
- End;
-
- /* checker menu */
-
- menu_checker = MenuObject, MUIA_Menu_Title,
- AppStrings[MSG_CHECKER_MENU1].as_Str,
- MUIA_Family_Child, MUI_MakeObject(MUIO_Menuitem,
- AppStrings[MSG_CHECKER_MENU1_ITEM1].as_Str,
- AppStrings[MSG_CHECKER_MENU1_ITEM1_COMMKEY].as_Str,
- 0, MEN_EXITCHECKER),
- End;
-
-
-
-
-
- /* set gadget IDs of all */
- /* GAL gadgets */
-
- for (n = 0; n < NUM_OF_GAL_GADGETS; n++)
- DoMethod(GAL_gads[n], MUIM_Notify, MUIA_Pressed, FALSE,
- app, 2, MUIM_Application_ReturnID, FIRST_GAL_GADID + n);
-
-
-
-
- if (!app || !menu_checker)
- {
- puts((char *)AppStrings[MSG_ERR_APPLICATION].as_Str);
- return FALSE;
- }
-
- /* get pointers to the menu objects of the main menu */
- /* with this pointers the main menu can be removed */
- /* and the GAL checker menu can be added */
-
- menu_project = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_PROJECT);
- menu_galtype = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_GALTYPE);
- menu_gal = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_GAL);
- menu_asm = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_GALASM);
- menu_galdis = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_GALDIS);
- menu_tools = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_TOOLS);
-
- /* show menu help text when the user */
- /* does press the HELP-key while the */
- /* mouse is over a menu item */
-
- DoMethod(app, MUIM_Notify, MUIA_Application_MenuHelp, MUIV_EveryTime,
- app, 5, MUIM_Application_ShowHelp, main_win, HELP_FILE,
- "Menus", 0);
-
- /* let GALer know when the close */
- /* gadget is selected */
-
- DoMethod(main_win, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
- app, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
-
-
-
-
- set(main_win, MUIA_Window_Open, TRUE); /* open the main window */
- get(main_win, MUIA_Window_Open, &open);
-
- if (!open)
- {
- puts((char *)AppStrings[MSG_ERR_OPENWINDOW].as_Str);
- return FALSE;
- }
-
-
-
-
- return TRUE;
- }
-
-
-
-
-
- /******************************************************************************
- ** CloseStuff()
- *******************************************************************************
- ** input: none
- ** output: none
- **
- ** remarks: close libraries and the MUI application
- ******************************************************************************/
-
- static void CloseStuff(void)
- {
-
- if (filereq)
- rtFreeRequest(filereq);
-
- if (ReqToolsBase)
- CloseLibrary((struct Library *)ReqToolsBase);
-
- if (LocaleBase)
- {
- CloseCatalog(catalog);
- CloseLibrary (LocaleBase);
- }
-
-
- if (app) /* close MUI application */
- MUI_DisposeObject(app);
-
- if (MUIMasterBase)
- CloseLibrary(MUIMasterBase);
-
- }
-
-
-
-
-
- /* EOF */
-