/* ******************************************************************** */ /* C code generated by: */ /* Visual Arts Version 2.1 */ /* Copyright 1994-95 Danny Y. Wong All rights reserved */ /* Calgary, Alberta (CANADA) */ /* Partial of the code is copyright by Jaba Development */ /* ******************************************************************** */ #include #include #include "SerialConsole_func.c" int GetPubScreen(void); void ClosePubScreen(void); int OpenSerConWindow(char windtitle[]); void CloseSerConWindow(void); int InitSerConConsole(void); extern int SerConConsoleHandler(void); int InitSerConSerial(void); extern int SerConSerialHandler(void); int SerConHandler(void); int SerConMainHandler(void); void DrawSerConObjs(void); int main(int argc, char *argv[]); UBYTE *PubScrName = "Workbench"; struct DrawInfo *ScrDrawInfo = NULL; APTR VisualInfo = NULL; struct Screen *Scr = NULL; struct Window *SerConWnd = NULL; struct Window *SerConConWnd = NULL; struct MsgPort *SerConConWritePort = NULL; struct MsgPort *SerConConReadPort = NULL; struct IOStdReq *SerConConWriteReq = NULL; struct IOStdReq *SerConConReadReq = NULL; struct MsgPort *SerConSerWritePort = NULL; struct MsgPort *SerConSerReadPort = NULL; struct IOExtSer *SerConSerWriteReq = NULL; struct IOExtSer *SerConSerReadReq = NULL; struct IntuiMessage SerConMsg; UWORD SerConLeft = 43; UWORD SerConTop = 16; UWORD SerConWidth = 525; UWORD SerConHeight = 79; char character; struct TextAttr topaz8 = { (STRPTR)"topaz.font", 8, 0x00, 0x01 }; struct TextAttr topaz800 = { (STRPTR)"topaz.font", 8, 0x00, 0x00 }; struct IntuiText SerConIText[] = { 1, 0, JAM2, 9, 1, &topaz800, (UBYTE *)"Instructions:", &SerConIText[1], 1, 0, JAM2, 19, 13, &topaz800, (UBYTE *)"1. Activate the Console Window", &SerConIText[2], 1, 0, JAM2, 19, 23, &topaz800, (UBYTE *)"2. Type in the command 'at' and press return", &SerConIText[3], 1, 0, JAM2, 19, 33, &topaz800, (UBYTE *)"3. You should get a 'OK' as a reply", &SerConIText[4], 1, 0, JAM2, 19, 43, &topaz800, (UBYTE *)"4. Now enter a BBS number you want to call and press return", &SerConIText[5], 1, 0, JAM2, 19, 53, &topaz800, (UBYTE *)"5. An example 1-403-2745545 in Calgary, Canada", NULL, }; int GetPubScreen(void) { if (!(Scr = LockPubScreen(PubScrName))) return(1L); if (!(VisualInfo = GetVisualInfo(Scr, TAG_DONE))) return(2L); if (!(ScrDrawInfo = GetScreenDrawInfo(Scr))) return(3L); return(0L); } void ClosePubScreen(void) { if (VisualInfo) FreeVisualInfo(VisualInfo); if (Scr) UnlockPubScreen(NULL, Scr); if (ScrDrawInfo) FreeScreenDrawInfo(Scr, ScrDrawInfo); } int InitSerConConsole(void) { SerConConWnd = OpenWindowTags( NULL, WA_Left, 0, WA_Top, 100, WA_Width, 640, WA_Height, 100, WA_Title, "Console Window", WA_IDCMP, NULL, WA_Flags, WFLG_DRAGBAR | WFLG_SIMPLE_REFRESH | WFLG_DEPTHGADGET | WFLG_SIZEGADGET | WFLG_SIZEBRIGHT, WA_CustomScreen, Scr, WA_MaxWidth, 640, WA_MaxHeight, 200, TAG_DONE ); if ( SerConConWnd == NULL ) return(6L); SerConConWritePort = CreatePort("SerCon.con.write", 0); if ( !SerConConWritePort) return(1L); SerConConWriteReq = CreateStdIO(SerConConWritePort); if ( !SerConConWriteReq) return(2L); SerConConReadPort = CreatePort("SerCon.con.read", 0); if ( !SerConConReadPort) return(3L); SerConConReadReq = CreateStdIO(SerConConReadPort); if ( !SerConConReadReq) return(4L); if ((OpenConsole(SerConConWriteReq, SerConConReadReq, SerConConWnd)) != 0) return(5L); return(0L); } int InitSerConSerial(void) { SerConSerWritePort = CreatePort("SerCon.ser.write", 0); if ( !SerConSerWritePort) return(1L); SerConSerWriteReq = (struct IOExtSer *)CreateExtIO(SerConSerWritePort, sizeof(struct IOExtSer)); if ( !SerConSerWriteReq) return(2L); SerConSerReadPort = CreatePort("SerCon.ser.read", 0); if ( !SerConSerReadPort) return(3L); SerConSerReadReq = (struct IOExtSer *)CreateExtIO(SerConSerReadPort, sizeof(struct IOExtSer)); if ( !SerConSerReadReq) return(4L); if ((OpenSerial(SerConSerReadReq, SerConSerWriteReq)) != 0) return(5L); if ((SetParams( SerConSerReadReq, 4096, 8, 8, 750000L, 19200, SERF_XDISABLED | SERF_SHARED , 48484848, 48484848)) != 0) return(6L); return(0L); } int OpenSerConWindow(char windtitle[80]) { if (!(SerConWnd = OpenWindowTags(NULL, WA_Left, SerConLeft, WA_Top, SerConTop, WA_Width, SerConWidth, WA_Height, SerConHeight + kWindowOffSetY, WA_NewLookMenus, TRUE, WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_GADGETUP , WA_Flags, WFLG_CLOSEGADGET | WFLG_SMART_REFRESH | WFLG_RMBTRAP | WFLG_ACTIVATE | WFLG_DRAGBAR , WA_Gadgets, NULL, WA_Title, windtitle, WA_ScreenTitle, "Visual Arts V2.2 Copyright 1994-95 Danny Y. Wong All Rights Reserved.", WA_PubScreen, Scr, WA_MinWidth, 160, WA_MinHeight, 50, WA_MaxWidth, 640, WA_MaxHeight, 200, TAG_DONE))) return(3L); DrawSerConObjs(); GT_RefreshWindow(SerConWnd, NULL); if (InitSerConConsole()) return(4L); if (InitSerConSerial()) return(5L); return(0L); } void CloseSerConWindow(void) { if (SerConConWnd) CloseWindow(SerConConWnd); if (SerConConWriteReq) CloseDevice((struct IORequest *)SerConConWriteReq); if (SerConConReadReq) DeleteStdIO(SerConConReadReq); if (SerConConReadPort) DeletePort(SerConConReadPort); if (SerConConWriteReq) DeleteStdIO(SerConConWriteReq); if (SerConConWriteReq) DeletePort(SerConConWritePort); AbortIO((struct IORequest *)SerConSerReadReq); WaitIO((struct IORequest *)SerConSerReadReq); if (SerConSerWriteReq) CloseDevice((struct IORequest *)SerConSerWriteReq); if (SerConSerReadReq) DeleteExtIO( (struct IORequest *)SerConSerReadReq); if (SerConSerReadPort) DeletePort(SerConSerReadPort); if (SerConSerWriteReq) DeleteExtIO( (struct IORequest *)SerConSerWriteReq); if (SerConSerWriteReq) DeletePort(SerConSerWritePort); if (SerConWnd) CloseWindow(SerConWnd); } int SerConHandler(void) { struct IntuiMessage *msg; struct VAobject VAObject; int running = 1; int (*func)(struct VAobject VAObject); ULONG class; UWORD code; while (msg=GT_GetIMsg(SerConWnd->UserPort)) { CopyMem((char *)msg, (char *)&SerConMsg, (long)sizeof(struct IntuiMessage)); class = msg->Class; code = msg->Code; GT_ReplyIMsg(msg); switch(class) { case IDCMP_CLOSEWINDOW: return(0); break; case IDCMP_GADGETUP: func = (void *)((struct Gadget *)SerConMsg.IAddress)->UserData; if (func != NULL) running = func(VAObject); break; } } return(running); } void DrawSerConObjs(void) { PrintIText(SerConWnd->RPort, SerConIText, SerConWnd->BorderLeft, SerConWnd->BorderTop); } int SerConConsoleHandler(void) { while( CheckIO((struct IORequest *)SerConConReadReq)) { WaitIO( (struct IORequest *)SerConConReadReq); SerPutChar(SerConSerWriteReq, character); /* write to serial */ QueueRead(SerConConReadReq, &character); } return(1); } int SerConSerialHandler(void) { while( CheckIO((struct IORequest *)SerConSerReadReq)) { WaitIO( (struct IORequest *)SerConSerReadReq); ConPutChar(SerConConWriteReq, character); /* write to console */ QueueSerRead(SerConSerReadReq, &character); } return(1); } int SerConMainHandler(void) { int running = 1; ULONG windsig, signals; ULONG consolesig; ULONG serialsig; QueueRead(SerConConReadReq, &character); consolesig = 1L << SerConConReadReq->io_Message.mn_ReplyPort->mp_SigBit; QueueSerRead(SerConSerReadReq, &character); serialsig = 1L << SerConSerReadReq->IOSer.io_Message.mn_ReplyPort->mp_SigBit; windsig = 1L << SerConWnd->UserPort->mp_SigBit; while (running == 1) { signals = Wait( windsig | consolesig | serialsig ); if (signals & windsig) { running = SerConHandler(); } else if (signals & consolesig) running = SerConConsoleHandler(); else if (signals & serialsig) running = SerConSerialHandler(); } return(running); } int main(int argc, char *argv[]) { int rc; if (!(GetPubScreen())) { if (!(OpenSerConWindow("Serial and Console Demo - Unmodified Codes"))) { rc = SerConMainHandler(); CloseSerConWindow(); } ClosePubScreen(); } return(0L); }