home *** CD-ROM | disk | FTP | other *** search
- /* FarPrint.c ***************************************************************
- *
- * FarPrint ------ Debugging functions for programs which don't
- * have links to their environment.
- *
- * FarPrint 'harbour' to receive and distribute
- * all incoming messages.
- *
- * Author -------- Olaf Barthel of ED Electronic Design Hannover
- * Brabeckstrasse 35
- * D-3000 Hannover 71
- *
- * Federal Republic of Germany.
- *
- * This program truly is in the PUBLIC DOMAIN. Written on a sunny
- * September day in 1989.
- *
- * Compiled using Aztec C 3.6a, CygnusEd Professional & ARexx.
- *
- ****************************************************************************/
-
- /* Our main includes, note that you MUST have the ARP
- * package to recompile FarPrint!
- */
-
- #include <intuition/intuitionbase.h>
- #include <libraries/dosextens.h>
- #include <libraries/arpbase.h>
- #include <graphics/gfxbase.h>
- #include <arpfunctions.h>
- #include <exec/memory.h>
-
- /* Forward declarations. */
-
- extern struct Library *OpenLibrary();
- extern struct Window *OpenWindow();
- extern struct Message *GetMsg();
- extern struct MenuItem *ItemAddress();
- extern struct MsgPort *CreatePort();
- extern struct TextFont *OpenFont();
- extern void *AllocMem();
- extern ULONG Wait();
-
- /* Signal sources. */
-
- #define SIG_WINDOW (1 << Window -> UserPort -> mp_SigBit)
- #define SIG_PORT (1 << FarPort -> mp_SigBit)
-
- /* Textprint macro. */
-
- #define PrintRequest(Request) Text(RPort,Request,strlen(Request))
-
- /* External communication commands. */
-
- #define FM_ADDTXT 0
- #define FM_REQTXT 1
- #define FM_REQNUM 2
-
- /* Custom task <-> task communication message. */
-
- struct FarMessage
- {
- struct Message fm_ExecMessage; /* Exec message link. */
-
- USHORT fm_Command; /* Perform which action? */
- STRPTR fm_Identifier; /* Who calls? */
- STRPTR fm_Text; /* Message to display. */
- };
-
- /* Messages to be displayed. */
-
- STRPTR TextList[128];
- long InTextList = 0;
-
- /* Global and shared data structures. */
-
- struct ArpBase *ArpBase;
- struct IntuitionBase *IntuitionBase;
- struct GfxBase *GfxBase;
- struct Window *Window;
- struct IntuiMessage *Massage;
- struct RastPort *RPort;
- struct MsgPort *FarPort;
- struct TextFont *DefaultFont;
- BOOL Pausing = FALSE;
-
- /* Maximum number of chars in FileRequest path. */
-
- #define MAXPATH ((FCHARS * 10) + DSIZE + 1)
-
- /* FileRequest working data. */
-
- UBYTE Filename[FCHARS + 1];
- UBYTE Directory[MAXPATH] = "SYS:";
-
- /* ARP FileRequester structure. */
-
- struct FileRequester MyRequest =
- {
- "Save message texts",
- (BYTE *)Filename,
- (BYTE *)Directory,
- NULL,NULL,NULL,NULL
- };
-
- /* Run dump for up arrow gadget. */
-
- USHORT UpMap[22] =
- {
- 0xFFFE,0xFEFE,0xFC7E,0xF83E,0xF01E,0xE00E,0xC006,0xF83E,
- 0xF83E,0xF83E,0xFFFE,
-
- 0x0000,0x0100,0x0380,0x07C0,0x0FE0,0x1FF0,0x3FF8,0x07C0,
- 0x07C0,0x07C0,0x0000
- };
-
- /* Run dump for down arrow gadget. */
-
- USHORT DnMap[22] =
- {
- 0xFFFE,0xF83E,0xF83E,0xF83E,0xC006,0xE00E,0xF01E,0xF83E,
- 0xFC7E,0xFEFE,0xFFFE,
-
- 0x0000,0x07C0,0x07C0,0x07C0,0x3FF8,0x1FF0,0x0FE0,0x07C0,
- 0x0380,0x0100,0x0000
- };
-
- /* Image structures for bool gadgets. */
-
- struct Image UpImage =
- {
- 0,0,
- 15,11,2,
- (USHORT *)UpMap,
- 0x03,0x00,
- (struct Image *)NULL
- };
-
- struct Image DnImage =
- {
- 0,0,
- 15,11,2,
- (USHORT *)DnMap,
- 0x03,0x00,
- (struct Image *)NULL
- };
-
- /* Our default text definitions. */
-
- struct TextAttr DefaultAttr[3] =
- {
- {(UBYTE *)"topaz.font",8,FS_NORMAL ,FPF_ROMFONT},
- {(UBYTE *)"topaz.font",8,FSF_BOLD ,FPF_ROMFONT},
- {(UBYTE *)"topaz.font",8,FSF_ITALIC,FPF_ROMFONT}
- };
-
- /* Select the "About..." menuitem to get this text. */
-
- struct IntuiText AboutTxt[14] =
- {
- {3,1,JAM1,8, 4,&DefaultAttr[1],(UBYTE *)"FarPrint v1.3", &AboutTxt[ 1]},
-
- {2,1,JAM1,8, 16,&DefaultAttr[0],(UBYTE *)"Was written by Olaf 'Olsen'", &AboutTxt[ 2]},
- {2,1,JAM1,8, 24,&DefaultAttr[0],(UBYTE *)"Barthel of ED Electronic", &AboutTxt[ 3]},
- {2,1,JAM1,8, 32,&DefaultAttr[0],(UBYTE *)"Design Hannover. The FarPrint", &AboutTxt[ 4]},
- {2,1,JAM1,8, 40,&DefaultAttr[0],(UBYTE *)"package is meant to be a", &AboutTxt[ 5]},
- {2,1,JAM1,8, 48,&DefaultAttr[0],(UBYTE *)"simple replacement for the", &AboutTxt[ 6]},
- {2,1,JAM1,8, 56,&DefaultAttr[0],(UBYTE *)"debug.lib functions which are", &AboutTxt[ 7]},
- {2,1,JAM1,8, 64,&DefaultAttr[0],(UBYTE *)"usually to transmit text and", &AboutTxt[ 8]},
- {2,1,JAM1,8, 72,&DefaultAttr[0],(UBYTE *)"other data to a terminal", &AboutTxt[ 9]},
- {2,1,JAM1,8, 80,&DefaultAttr[0],(UBYTE *)"connected to the serial port", &AboutTxt[10]},
- {2,1,JAM1,8, 88,&DefaultAttr[0],(UBYTE *)"of the Amiga.", &AboutTxt[11]},
-
- {0,1,JAM1,8,104,&DefaultAttr[2],(UBYTE *)"(C) Copyright 1989 by...,", &AboutTxt[12]},
- {0,1,JAM1,8,112,&DefaultAttr[2],(UBYTE *)"ED Electronic Design Hannover", NULL},
-
- {0,1,JAM1,5, 3,&DefaultAttr[0],(UBYTE *)"Understood", NULL}
- };
-
- /* This will become our menu. */
-
- struct IntuiText FarIntTxt[6] =
- {
- {0,1,JAM2,2,1,&DefaultAttr[0],(UBYTE *)"About FarPrint... ",NULL},
- {0,1,JAM1,2,1,&DefaultAttr[1],(UBYTE *)"_______________________",NULL},
- {0,1,JAM2,2,1,&DefaultAttr[0],(UBYTE *)"Save Message texts ",NULL},
- {0,1,JAM2,2,1,&DefaultAttr[0],(UBYTE *)"Pause ",NULL},
- {0,1,JAM2,2,1,&DefaultAttr[0],(UBYTE *)"Iconify Window ",NULL},
- {0,1,JAM2,2,1,&DefaultAttr[0],(UBYTE *)"Quit FarPrint ",NULL}
- };
-
- /* Now transform it into a chain of menu items. */
-
- struct MenuItem FarMenuItem[6] =
- {
- {&FarMenuItem[1],0, 0,188,10, 86,0,(APTR)&FarIntTxt[0],NULL,'?',NULL,NULL},
- {&FarMenuItem[2],0, 3,188,10,210,0,(APTR)&FarIntTxt[1],NULL, 0,NULL,NULL},
- {&FarMenuItem[3],0,13,188,10, 86,0,(APTR)&FarIntTxt[2],NULL,'S',NULL,NULL},
- {&FarMenuItem[4],0,23,188,10, 86,0,(APTR)&FarIntTxt[3],NULL,'P',NULL,NULL},
- {&FarMenuItem[5],0,33,188,10, 86,0,(APTR)&FarIntTxt[4],NULL,'I',NULL,NULL},
- {NULL, 0,43,188,10, 86,0,(APTR)&FarIntTxt[5],NULL,'Q',NULL,NULL}
- };
-
- /* This binds them into a menu. */
-
- struct Menu FarMenu = {NULL,0,0,112,0,257,"FarPrint v1.3",&FarMenuItem[0]};
-
- /* Now comes some gadget data. */
-
- UBYTE StrInfStr[81],UndoStrInfStr[81];
-
- struct StringInfo FarStrInf = {&StrInfStr[0],&UndoStrInfStr[0],0,81,0,0,0,0,0,NULL,NULL,NULL};
- struct PropInfo FarPropInf = {AUTOKNOB | FREEVERT,0,0,0,MAXBODY,0,0,0,0,0,0};
-
- SHORT FarBrdDat[] =
- {
- -1,-1,88,-1,88,14,-1,14,
- -1,-1,632,-1,632,8,-1,8,-1,-1,
- -2,-1,633,-1,633,8,-2,8,-2,-1,
- 0,0,-639,0,
- 0,0,-637,0,
- };
-
- struct Border FarBrd[5] =
- {
- { 0, 0,0,7,0,4,&FarBrdDat[ 0],NULL},
- { 0, 0,1,0,0,5,&FarBrdDat[ 8],&FarBrd[2]},
- { 0, 0,1,0,0,5,&FarBrdDat[18],NULL},
- {639,116,1,0,0,2,&FarBrdDat[28],&FarBrd[4]},
- {638,116,1,0,0,2,&FarBrdDat[32],NULL}
- };
-
- struct Gadget FarGad[4] =
- {
- {&FarGad[1], 4,128,632, 8,GADGHCOMP | GADGHCOMP | GADGDISABLED,RELVERIFY | GADGIMMEDIATE, STRGADGET ,(APTR)&FarBrd[1],NULL,NULL,NULL,(APTR)&FarStrInf, 0,NULL},
- {&FarGad[2],621, 11, 15,11,GADGIMAGE | GADGHCOMP ,RELVERIFY | GADGIMMEDIATE, BOOLGADGET,(APTR)&UpImage, NULL,NULL,NULL,NULL, 1,NULL},
- {&FarGad[3],621,104, 15,11,GADGIMAGE | GADGHCOMP ,RELVERIFY | GADGIMMEDIATE, BOOLGADGET,(APTR)&DnImage, NULL,NULL,NULL,NULL, 2,NULL},
- {NULL ,621, 23, 15,80,GADGHNONE ,RELVERIFY | GADGIMMEDIATE | FOLLOWMOUSE,PROPGADGET,(APTR)&FarBrd[0],NULL,NULL,NULL,(APTR)&FarPropInf,3,NULL}
- };
-
- /* The main window. */
-
- struct NewWindow NewWindow =
- {
- 0,11,
- 640,137,
- 0,1,
- CLOSEWINDOW | MOUSEMOVE | GADGETUP | GADGETDOWN | MENUPICK,
- WINDOWDEPTH | WINDOWCLOSE | WINDOWDRAG,
- (struct Gadget *)&FarGad[0],
- (struct Image *)NULL,
- (STRPTR)"FarPrint v1.3",
- (struct Screen *)NULL,
- (struct BitMap *)NULL,
- 0,0,
- 0,0,
- WBENCHSCREEN
- };
-
- /* CLI detach stuff. */
-
- long _stack = 8000;
- long _priority = 0;
- long _BackGroundIO = 0;
- char *_procname = "FarPrint v1.3";
-
- /* SetPropPosition(Value):
- *
- * Sets the slider position of the proportional
- * gadget.
- */
-
- void
- SetPropPosition(Value)
- long Value;
- {
- if(Value > InTextList || Value < 0)
- return;
-
- if(InTextList)
- ModifyProp(&FarGad[3],Window,NULL,AUTOKNOB | FREEVERT,0,Value * (MAXPOT / InTextList),0,MAXBODY / InTextList);
- else
- ModifyProp(&FarGad[3],Window,NULL,AUTOKNOB | FREEVERT,0,MAXPOT,0,MAXBODY);
- }
-
- /* GetPropPosition():
- *
- * Returns the slider position of the proportional
- * gadget.
- */
-
- long
- GetPropPosition()
- {
- long Value;
-
- if(InTextList)
- Value = FarPropInf . VertPot / (MAXPOT / InTextList);
- else
- Value = FarPropInf . VertPot / MAXPOT;
-
- if(Value >= InTextList)
- Value = InTextList - 1;
- }
-
- /* DrawText(From,SaveTime):
- *
- * Draws the list of recorded messages.
- */
-
- void
- DrawText(From,SaveTime)
- long From;
- BOOL SaveTime;
- {
- long i,Length;
-
- static long LastPosition = -1;
-
- if(LastPosition == From && SaveTime)
- return;
-
- LastPosition = From;
-
- SetAPen(RPort,0);
- RectFill(RPort,4,11,618,114);
- SetAPen(RPort,1);
-
- for(i = 0 ; i < 13 ; i++)
- {
- if(i + From >= InTextList || !TextList[i])
- break;
-
- Move(RPort,4,17 + 8 * i);
-
- if((Length = strlen(TextList[i + From])) > 77)
- Length = 77;
-
- if(Length)
- FastText(RPort,TextList[i + From],Length);
- }
- }
-
- /* AddText(Message):
- *
- * Adds a message to the current list of recorded
- * texts.
- */
-
- void
- AddText(Message)
- STRPTR *Message;
- {
- /* Only 128 messages allowed. */
-
- if(InTextList == 128)
- {
- register long i;
-
- FreeMem(TextList[0],strlen(TextList[0]) + 1);
-
- for(i = 0 ; i < 127 ; i++)
- TextList[i] = TextList[i + 1];
-
- InTextList = 127;
- }
-
- if(TextList[InTextList] = (STRPTR)AllocMem(strlen(Message) + 1,MEMF_PUBLIC))
- {
- strcpy(TextList[InTextList],Message);
-
- InTextList++;
-
- ModifyProp(&FarGad[3],Window,NULL,AUTOKNOB | FREEVERT,0,FarPropInf . VertPot,0,MAXBODY / InTextList);
-
- if(GetPropPosition() + 13 < InTextList)
- SetPropPosition(GetPropPosition() + 1);
-
- DrawText(GetPropPosition(),FALSE);
- }
- }
-
- /* FreeTextList():
- *
- * Frees the list of recorded messages.
- */
-
- void
- FreeTextList()
- {
- long i;
-
- for(i = 0 ; i < InTextList ; i++)
- if(TextList[i])
- FreeMem(TextList[i],strlen(TextList[i] + 1));
- }
-
- /* ClearRequest():
- *
- * Clears the part of the window above the string
- * gadget.
- */
-
- void
- ClearRequest()
- {
- SetAPen(RPort,0);
- RectFill(RPort,2,117,637,126);
- SetAPen(RPort,1);
-
- Move(RPort,2,124);
- }
-
- /* SaveText():
- *
- * Saves the list of recorded messages to disk. Uses
- * the ARP FileRequester.
- */
-
- void
- SaveText()
- {
- char *Selection;
- UBYTE *Title = Window -> Title;
-
- if(!InTextList)
- return;
-
- if(Selection = FileRequest(&MyRequest))
- {
- if(Selection[0])
- {
- UBYTE Destination[FCHARS + 1 + MAXPATH];
- long DestFile;
-
- strcpy(Destination,Directory);
-
- if(Directory[strlen(Directory) - 1] != ':' && Directory[strlen(Directory) - 1] != '/')
- strcat(Destination,"/");
-
- strcat(Destination,Filename);
-
- if(DestFile = Open(Destination,MODE_NEWFILE))
- {
- long i;
-
- for(i = 0 ; i < InTextList ; i++)
- {
- if(Write(DestFile,TextList[i],strlen(TextList[i])) < 1)
- break;
-
- if(Write(DestFile,"\n",1) < 1)
- break;
- }
-
- Close(DestFile);
-
- SetWindowTitles(Window,"Message texts saved",-1);
-
- Delay(TICKS_PER_SECOND * 2);
-
- SetWindowTitles(Window,Title,-1);
-
- return;
- }
- }
- }
-
- SetWindowTitles(Window,"Message texts NOT saved!",-1);
-
- Delay(TICKS_PER_SECOND * 2);
-
- SetWindowTitles(Window,Title,-1);
- }
-
- /* CloseAll(ReturnCode):
- *
- * Frees anything we have allocated and quits.
- */
-
- void
- CloseAll(ReturnCode)
- long ReturnCode;
- {
- FreeTextList();
-
- FreeFastText();
-
- if(DefaultFont)
- CloseFont(DefaultFont);
-
- if(FarPort)
- {
- struct Message *TmpMessage;
-
- while(TmpMessage = (struct Message *)GetMsg(FarPort))
- ReplyMsg(TmpMessage);
-
- ClearMenuStrip(Window);
-
- Forbid();
- DeletePort(FarPort);
- Permit();
- }
-
- if(Window)
- {
- while(Massage = (struct IntuiMessage *)GetMsg(Window -> UserPort))
- ReplyMsg(Massage);
-
- ClearMenuStrip(Window);
-
- CloseWindow(Window);
- }
-
- if(ArpBase)
- CloseLibrary(ArpBase);
-
- exit(ReturnCode);
- }
-
- /* OpenAll():
- *
- * Sets up everything we need to execute successfully.
- */
-
- void
- OpenAll()
- {
- if(!(ArpBase = (struct ArpBase *)OpenLibrary("arp.library",ArpVersion)))
- CloseAll(20);
-
- IntuitionBase = (struct IntuitionBase *)ArpBase -> IntuiBase;
- GfxBase = (struct GfxBase *)ArpBase -> GfxBase;
-
- if(!(FarPort = (struct MsgPort *)CreatePort("FarPort",0)))
- CloseAll(20);
-
- if(!(Window = (struct Window *)OpenWindow(&NewWindow)))
- CloseAll(20);
-
- SetMenuStrip(Window,&FarMenu);
-
- if(!(DefaultFont = (struct TextFont *)OpenFont(&DefaultAttr[0])))
- CloseAll(20);
-
- if(!InitFastText(DefaultFont))
- CloseAll(20);
-
- RPort = Window -> RPort;
-
- SetAPen(RPort,1);
- SetBPen(RPort,0);
- SetDrMd(RPort,JAM2);
-
- DrawBorder(RPort,&FarBrd[3],0,0);
-
- SetFont(RPort,DefaultFont);
- }
-
- /* Iconify():
- *
- * Rewritten version of Leo Schwab's Iconify routine.
- */
-
- Iconify()
- {
- /* Bitmap rundump for icon image. */
-
- static USHORT IconMap[184] =
- {
- 0x1FFF,0xFFFF,0xFFFF,0xF000,0x3000,0x0000,0x0000,0x1800,
- 0x3000,0x0000,0x0000,0x1800,0x31C0,0x0008,0xD001,0x1800,
- 0x3080,0x0001,0x0001,0x1800,0x308E,0x73CB,0x938F,0x1800,
- 0x3090,0x8A29,0x1451,0x1800,0x3090,0x8A29,0x17D1,0x1800,
- 0x3090,0x8A29,0x1411,0x1800,0x31CE,0x7229,0x138F,0x1800,
- 0x3000,0x0000,0x0000,0x1800,0x3000,0x0000,0x0000,0x1800,
- 0x3078,0x0000,0x0804,0x1800,0x3040,0x0000,0x0004,0x1800,
- 0x3041,0xC778,0xEBCE,0x1800,0x3072,0x2845,0x0A24,0x1800,
- 0x3042,0x2845,0x0A24,0x1800,0x3042,0x2845,0x0A24,0x1800,
- 0x3041,0xE879,0x0A24,0x1800,0x3000,0x0040,0x0000,0x1800,
- 0x3000,0x0000,0x0000,0x1800,0x1FFF,0xFFFF,0xFFFF,0xE800,
- 0x0000,0x0000,0x0000,0x0000,
-
- 0x1000,0x0000,0x0000,0x1000,0x0FFF,0xFFFF,0xFFFF,0xC000,
- 0xC000,0x0000,0x0000,0x6000,0xC000,0x0000,0x0000,0x6000,
- 0xC700,0x0032,0xE006,0x6000,0xC300,0x0004,0x0000,0x6000,
- 0xC32D,0x6596,0x6B2E,0x6000,0xC363,0x34D6,0x6826,0x6000,
- 0xC363,0x34D6,0x6BE6,0x6000,0xC221,0x0CD6,0x6860,0x6000,
- 0xC7BD,0xECF6,0x6F3E,0x6000,0xC000,0x0000,0x0000,0x6000,
- 0xC000,0x0000,0x0000,0x6000,0xC1B0,0x0000,0x3018,0x6000,
- 0xC180,0x0000,0x0010,0x6000,0xC185,0x97B2,0xF598,0x6000,
- 0xC1AC,0xD19A,0x34D8,0x6000,0xC18C,0xD19A,0x34D8,0x6000,
- 0xC18C,0x1186,0x34D8,0x6000,0xC187,0xF1B6,0x3CD8,0x6000,
- 0xC000,0x0180,0x0000,0x6000,0xF000,0x0000,0x0000,0x1800,
- 0x3FFF,0xFFFF,0xFFFF,0xC000
- };
-
- static struct Image IconImage =
- {
- 0,0,
- 53,23,2,
- (USHORT *)IconMap,
- 0x03,0x00,
- (struct Image *)NULL
- };
-
- /* This is the 'icon stuff. */
-
- static struct Gadget IconGadget =
- {
- NULL,
- 0,0,53,23,
- GADGHCOMP | GRELWIDTH | GRELHEIGHT | GADGIMAGE,
- GADGIMMEDIATE,
- WDRAGGING,
- (APTR)&IconImage,
- NULL,NULL,NULL,NULL,
- 0,0
- };
-
- static struct NewWindow IconNewWindow =
- {
- 0,11,53,23,
- -1,-1,
- GADGETDOWN | INACTIVEWINDOW,
- BORDERLESS | RMBTRAP,
- &IconGadget,
- NULL,NULL,NULL,NULL,
- 0,0,0,0,
- WBENCHSCREEN
- };
-
- struct Window *IconWindow;
-
- register struct IntuiMessage *IconMessage;
- long Seconds = 0,Micros = 0,CurrentSeconds,CurrentMicros,Class;
-
- /* Free some data. */
-
- FreeFastText();
-
- NewWindow . TopEdge = Window -> TopEdge;
-
- while(Massage = (struct IntuiMessage *)GetMsg(Window -> UserPort))
- ReplyMsg(Massage);
-
- ClearMenuStrip(Window);
-
- CloseWindow(Window);
-
- /* Build the icon. */
-
- if(!(IconWindow = (struct Window *)OpenWindow(&IconNewWindow)))
- goto Finish;
-
- IconWindow -> UserData = (BYTE *)0x49434F4EL;
-
- FOREVER
- {
- /* Wait for the user to reactivate us. */
-
- WaitPort(IconWindow -> UserPort);
-
- if(IconMessage = (struct IntuiMessage *)GetMsg(IconWindow -> UserPort))
- {
- Class = IconMessage -> Class;
- CurrentSeconds = IconMessage -> Seconds;
- CurrentMicros = IconMessage -> Micros;
-
- ReplyMsg(IconMessage);
-
- if(Class == GADGETDOWN)
- {
- if(DoubleClick(Seconds,Micros,CurrentSeconds,CurrentMicros))
- break;
-
- Seconds = CurrentSeconds;
- Micros = CurrentMicros;
- }
-
- /* Say, if you dragged an icon, released
- * it and did so repeatedly, would you
- * expect the icon to be double-clicked?
- * Since Workbench icons don't behave that
- * way we reset the double-click counter
- * once the icon is released.
- */
-
- if(Class == INACTIVEWINDOW)
- Seconds = Micros = 0;
- }
- }
-
- /* Remember icon position. */
-
- IconNewWindow . LeftEdge= IconWindow -> LeftEdge;
- IconNewWindow . TopEdge = IconWindow -> TopEdge;
-
- CloseWindow(IconWindow);
-
- /* Restore window and display. */
-
- Finish: if(!(Window = (struct Window *)OpenWindow(&NewWindow)))
- CloseAll(20);
-
- RPort = Window -> RPort;
-
- SetAPen(RPort,1);
- SetBPen(RPort,0);
- SetDrMd(RPort,JAM2);
-
- DrawBorder(RPort,&FarBrd[3],0,0);
-
- SetFont(RPort,DefaultFont);
-
- SetMenuStrip(Window,&FarMenu);
-
- if(!InitFastText(DefaultFont))
- CloseAll(20);
-
- DrawText(GetPropPosition(),FALSE);
-
- ClearRequest();
- PrintRequest("- No pending requests -");
-
- if(Pausing)
- SetWindowTitles(Window,"FarPrint v1.3 (pausing)",-1);
- }
-
- /* Some stubs, we don't need these routines. */
-
- void _cli_parse() {}
- void _wb_parse() {}
-
- void
- main()
- {
- /* Startup & initialization. */
-
- OpenAll();
-
- ClearRequest();
- PrintRequest("- No pending requests -");
-
- FOREVER
- {
- /* Wait for something to wake us up. */
-
- Wait(SIG_WINDOW | SIG_PORT);
-
- AskPort: if(!Pausing)
- {
- struct FarMessage *FarMessage;
-
- if(!(FarMessage = (struct FarMessage *)GetMsg(FarPort)))
- goto AskWindow;
-
- /* Add a text to the list? */
-
- if(FarMessage -> fm_Command == FM_ADDTXT)
- {
- AddText(FarMessage -> fm_Text);
-
- ReplyMsg(FarMessage);
-
- continue;
- }
-
- /* External caller requests input. */
-
- ClearRequest();
- PrintRequest("\"");PrintRequest(FarMessage -> fm_Identifier);PrintRequest("\"");
-
- /* Text or number required? */
-
- if(FarMessage -> fm_Command == FM_REQTXT)
- {
- PrintRequest(" requests string input.");
- FarGad[0] . Activation &= ~LONGINT;
- }
- else
- {
- PrintRequest(" requests numeric input.");
- FarGad[0] . Activation |= LONGINT;
- }
-
- /* Ask user to enter something. */
-
- OnGadget(&FarGad[0],Window,NULL);
-
- FOREVER
- {
- ActivateWindow(Window);
- ActivateGadget(&FarGad[0],Window,NULL);
-
- WaitPort(Window -> UserPort);
-
- if(Massage = (struct IntuiMessage *)GetMsg(Window -> UserPort))
- {
- ULONG Class = Massage -> Class;
- struct Gadget *ID = (struct Gadget *)Massage -> IAddress;
-
- ReplyMsg(Massage);
-
- if(Class == GADGETUP && ID -> GadgetID == 0)
- break;
- }
- }
-
- strcpy(FarMessage -> fm_Text,StrInfStr);
- setmem(StrInfStr,81,0);
-
- FarStrInf . BufferPos = FarStrInf . DispPos = 0;
-
- OffGadget(&FarGad[0],Window,NULL);
-
- ClearRequest();
- PrintRequest("- No pending requests -");
-
- ReplyMsg(FarMessage);
- }
-
- /* Examine the window. */
-
- AskWindow: while(Massage = (struct IntuiMessage *)GetMsg(Window -> UserPort))
- {
- ULONG Class = Massage -> Class;
- USHORT Code = Massage -> Code;
- struct Gadget *ID = (struct Gadget *)Massage -> IAddress;
- USHORT MenuNum;
- struct MenuItem *Item;
- long Value;
-
- ReplyMsg(Massage);
-
- /* Scroll the scrollbar? */
-
- if(Class == GADGETDOWN && (ID -> GadgetID == 1 || ID -> GadgetID == 2))
- {
- FOREVER
- {
- Value = GetPropPosition();
-
- if(ID -> GadgetID == 1)
- SetPropPosition(Value - 1);
-
- if(ID -> GadgetID == 2)
- SetPropPosition(Value + 1);
-
- DrawText(GetPropPosition(),TRUE);
-
- if(Massage = (struct IntuiMessage *)GetMsg(Window -> UserPort))
- {
- Class = Massage -> Class;
-
- ReplyMsg(Massage);
-
- if(Class == GADGETUP)
- break;
- }
- }
- }
-
- /* Selected a menu item. */
-
- if(Class == MENUPICK)
- {
- MenuNum = Code;
-
- while(MenuNum != MENUNULL)
- {
- switch(ITEMNUM(MenuNum))
- {
- case 0: Window -> Flags |= RMBTRAP;
- AutoRequest(Window,&AboutTxt[0],NULL,&AboutTxt[13],NULL,NULL,278,158);
- Window -> Flags &= ~RMBTRAP;
-
- goto AskPort;
-
- case 2: SaveText();
-
- goto AskPort;
-
- case 3: if(Pausing)
- {
- FarIntTxt[3] . IText = (UBYTE *)"Pause ";
- FarMenuItem[3] . Command= 'P';
-
- SetWindowTitles(Window,"FarPrint v1.3",-1);
- }
- else
- {
- FarIntTxt[3] . IText = (UBYTE *)"Continue ";
- FarMenuItem[3] . Command= 'C';
-
- SetWindowTitles(Window,"FarPrint v1.3 (pausing)",-1);
- }
-
- Pausing ^= TRUE;
-
- goto AskPort;
-
- case 4: Iconify();
- goto AskPort;
-
- case 5: CloseAll(0);
-
- default:break;
- }
-
- Item = (struct MenuItem *)ItemAddress(&FarMenu,MenuNum);
-
- MenuNum = Item -> NextSelect;
- }
- }
-
- /* Proportional gadget container selected. */
-
- if(Class == GADGETDOWN && ID -> GadgetID == 3)
- DrawText(GetPropPosition(),TRUE);
-
- /* User drags the scrollbar. */
-
- if(Class == MOUSEMOVE)
- DrawText(GetPropPosition(),TRUE);
-
- /* Finis... */
-
- if(Class == CLOSEWINDOW)
- CloseAll(0);
- }
- }
- }
-