Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (05/07/90)
Submitted-by: Richard Frost <rfrost@spam.ua.OZ.AU>
Posting-number: Volume 90, Issue 163
Archive-name: applications/nv-2.32/part02
#!/bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 2 (of 6)."
# Contents: CreateFileList.h Gadgets.c Globals.h Main.c
# Requester/Requester.pw.uu ShutDown.c ViewGads.h WBench.c
# Wrapped by tadguy@xanth on Sun May 6 18:08:37 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'CreateFileList.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'CreateFileList.h'\"
else
echo shar: Extracting \"'CreateFileList.h'\" \(1964 characters\)
sed "s/^X//" >'CreateFileList.h' <<'END_OF_FILE'
X/* ======================================================================= */
X/* */
X/* PROGRAM: News View */
X/* */
X/* VERSION: 2.3a */
X/* */
X/* */
X/* FILENAME: CreateFileList.h */
X/* */
X/* DESCRIPTION: Major routine that finds the news items in the directory */
X/* specified by argv[1] and loads them into the News Item */
X/* List structures. */
X/* */
X/* AUTHORS: Robert Wozniak Copyright 1990 */
X/* Richard Frost => Message Window Stuff */
X/* => Very minor bug fixes */
X/* */
X/* */
X/* DATE: 25th March 1990 */
X/* */
X/* ======================================================================= */
X
Xextern int CreateFileList();
Xextern BOOL ExternalReadItem();
X
Xextern FILE *fopen();
Xextern void CloseRUN();
Xextern int did_cd;
Xextern int Items;
X
Xextern ITEM firsti;
X
Xextern struct FileLock *dirlock,*old_cd,*CurrentDir();
Xextern struct FileInfoBlock *my_fib;
Xextern struct FileHandle *my_fhand;
END_OF_FILE
if test 1964 -ne `wc -c <'CreateFileList.h'`; then
echo shar: \"'CreateFileList.h'\" unpacked with wrong size!
fi
# end of 'CreateFileList.h'
fi
if test -f 'Gadgets.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Gadgets.c'\"
else
echo shar: Extracting \"'Gadgets.c'\" \(9132 characters\)
sed "s/^X//" >'Gadgets.c' <<'END_OF_FILE'
X/* ======================================================================= */
X/* */
X/* PROGRAM: News View */
X/* */
X/* VERSION: 2.00 */
X/* */
X/* */
X/* FILENAME: Gadgets.c */
X/* */
X/* DESCRIPTION: This module is a collection of routines that deal with */
X/* all the gadgets that are in the window. */
X/* */
X/* AUTHOR: Copyright 1990 Richard Frost */
X/* */
X/* DATE: 20th March 1990 */
X/* */
X/* ======================================================================= */
X
X#include "Defs.h"
X#include "Globals.h"
X#include "Display.h"
X#include "Select.h"
X#include "WindData.h"
X
X
X
X#define UPDATESLIDER 1
X#define DONT_UPDATESLIDER 0
X
X
X/* ======================================================================= */
X/* SetKnobPos */
X/* ======================================================================= */
X
X/* Set the position of the knob to reflect the position in
X the news viewer's item list.
X*/
X
XPUBLIC VOID SetKnobPos()
X{
X USHORT Vpot,Vbody;
X
X if (NumItems <= Wind_Rows)
X Vpot = 0;
X else
X Vpot = ((float) 0xFFFF) * ((float)Wind_FirstItem)/((float)MaxFirstItem);
X
X Vbody= VertSliderSInfo.VertBody;
X NewModifyProp(&VertSlider,NV_Window,NULL,VertSliderSInfo.Flags,0,Vpot,0,Vbody,1);
X}
X
X/* ======================================================================= */
X/* SetKnobSize */
X/* ======================================================================= */
X
X/* Set the variable VertBody of the vertical slider gadget, thus adjusting
X the Size of the knob of the proportional gadget. */
X
XPUBLIC VOID SetKnobSize()
X{
X USHORT vbody,vpot;
X
X
X /* calculate the VertBody variable .. */
X
X /* CALCULATION: The VertBody variable is the fraction of the total
X text VISIBLE.
X
X ie ffff * ItemsDisplayed/NumItems
X */
X
X /* Calculate number of visible items */
X
X if (NumItems == ItemsDisplayed) /* we can see ALL ITEMS */
X {
X vbody = 0xFFFF;
X#ifdef DEBUG_ON
X printf("\nSetKnobSize: ALL ITEMS ARE SHOWING !\n");
X#endif
X NewModifyProp(&VertSlider,NV_Window,NULL,VertSliderSInfo.Flags,0,0,0,vbody,1);
X }
X else
X {
X#ifdef DEBUG_ON
X printf("\nSetKnobSize: INIT SLIDER \n");
X printf("SetKnobSize:NumItems = %d\n",NumItems);
X printf("SetKnobSize:ItemsDisplayed =%d\n",ItemsDisplayed);
X#endif
X vbody = ((float) 0xffff) * ( ((float) Wind_Rows)/((float) NumItems) );
X
X vpot = VertSliderSInfo.VertPot;
X
X#ifdef DEBUG_ON
X printf("SetKnobSize:vpot = %4x\n",vpot);
X printf("SetKnobSize:vbody = %4x\n",vbody);
X#endif
X
X /* calculate the pot & body variable */
X
X NewModifyProp(&VertSlider,NV_Window,NULL,VertSliderSInfo.Flags,0,vpot,0,vbody,1);
X }
X
X}
X
X/* ======================================================================= */
X/* MoveSlider */
X/* ======================================================================= */
X
XPUBLIC VOID MoveSlider()
X{
X USHORT Vpot;
X register SHORT pos,dist;
X register SHORT i;
X
X static SHORT PrevWFI=0; /* The previous "Wind_FirstItem" value */
X /* This is the max number of single line scrolls
X in succession that will occur. */
X#define SCROLL_TOLERANCE 15
X
X#ifdef DEBUG_ON
Xprintf("\nPrevWFI = %d\n",PrevWFI);
Xprintf("MoveSlider: NumItems = %d\n",NumItems);
Xprintf("MoveSlider: ItemsDisplayed = %d\n",ItemsDisplayed);
X#endif
X
X if ( NumItems > ItemsDisplayed) /* if there are items NOT SHOWING .. */
X {
X
X#ifdef DEBUG_ON
Xprintf("MoveSlider: Wind_FirstItem BEFORE = %d\n",Wind_FirstItem);
X#endif
X
X /* Don't alter the current VertPot setting !! */
X Vpot = VertSliderSInfo.VertPot;
X
X#ifdef DEBUG_ON
Xprintf("MoveSlider: POT VALUE %4x\n",Vpot);
X#endif
X
X /* CONVERT the current position of the slider gadget into a news item
X offset value..
X */
X pos = ((float) Vpot / (float) 0xffff) * ((float) (MaxFirstItem));
X
X
X#ifdef DEBUG_ON
Xprintf("MoveSlider: Wind_FirstItem AFTER =%d\n",Wind_FirstItem);
X#endif
X
X /* DISPLAY SCROLLER OPTIMIZER!! */
X if (pos != PrevWFI)
X {
X
X if (pos > PrevWFI)
X {
X/*
Xprintf("DOWN: Distance = %d\n",pos-PrevWFI);
X*/
X if ((dist = pos-PrevWFI) < SCROLL_TOLERANCE)
X for (i=0; i < dist; i++)
X ScrollDown(DONT_UPDATESLIDER);
X else
X {
X Wind_FirstItem = pos;
X RedrawWindow();
X }
X
X PrevWFI = Wind_FirstItem;
X/*
Xprintf("AFTER THE SCROLL DOWN: Distance = %d\n",Wind_FirstItem-PrevWFI);
X*/
X }
X else
X {
X/*
Xprintf("UP: Distance = %d\n",PrevWFI-pos);
X*/
X
X if ((dist = PrevWFI-pos) < SCROLL_TOLERANCE)
X for (i=0; i < dist; i++)
X ScrollUp(DONT_UPDATESLIDER);
X else
X {
X Wind_FirstItem = pos;
X RedrawWindow();
X }
X
X PrevWFI = Wind_FirstItem;
X/*
Xprintf("AFTER THE SCROLL UP: Distance = %d\n",Wind_FirstItem-PrevWFI);
X*/
X
X }
X }
X }
X}
X
X/* ======================================================================= */
X/* StartSelectGadget */
X/* ======================================================================= */
X
XPUBLIC VOID StartSelectGadget(gad)
Xstruct Gadget *gad;
X{
X extern struct Message *GetMsg();
X struct IntuiMessage *m;
X
X switch(gad->GadgetID)
X {
X case VERT_SLIDER:
X /* Start receiving mouse move events */
X ReportMouse(TRUE,NV_Window);
X break;
X
X case UP_BUTTON:
X while (!(m = (struct IntuiMessage *) GetMsg(NV_Window->UserPort)))
X {
X ScrollUp(UPDATESLIDER);
X }
X ReplyMsg(m);
X SetCurrentItem(Wind_FirstItem+CurrentRow);
X break;
X
X case DOWN_BUTTON:
X while (!(m = (struct IntuiMessage *) GetMsg(NV_Window->UserPort)))
X {
X ScrollDown(UPDATESLIDER);
X }
X ReplyMsg(m);
X SetCurrentItem(Wind_FirstItem+CurrentRow);
X break;
X }
X}
X
X
X/* ======================================================================= */
X/* EndSelectGadget */
X/* ======================================================================= */
X
XPUBLIC VOID EndSelectGadget(gad)
Xstruct Gadget *gad;
X{
X struct StringInfo *siptr;
X register SHORT item;
X
X switch (gad->GadgetID) /* Find out what gadget got hit ... */
X {
X case First_Item:
X /* NOTE: EraseArrow MUST be ALWAYS done B4 we
X alter Wind First Item!! */
X EraseArrow();
X Wind_FirstItem = 0;
X RedrawWindow();
X SetKnobPos();
X SetCurrentItem(0);
X DrawArrow();
X break;
X
X case Last_Item:
X EraseArrow();
X Wind_FirstItem = MaxFirstItem;
X RedrawWindow();
X SetKnobPos();
X SetCurrentItem(NumItems-1);
X DrawArrow();
X break;
X
X case Next_Item: item = GetNextItem();
X EraseArrow();
X CentreOnItem(item);
X DrawArrow();
X GoReadItem(item);
X break;
X
X case Prev_Item: item = GetPrevItem();
X EraseArrow();
X CentreOnItem(item);
X DrawArrow();
X GoReadItem(item);
X break;
X
X case Next_Reply: item = GetNextReply();
X if (item != CurrentItem)
X {
X EraseArrow();
X CentreOnItem(item);
X DrawArrow();
X GoReadItem(item);
X }
X else
X DisplayBeep(NULL);
X break;
X
X case String_Gad:
X#ifdef ABC
X printf("SelectGadget: String Gad\n");
X siptr = (struct StringInfo *) gad->SpecialInfo;
X printf("SelectGadget: buffer is [%s]\n",siptr->Buffer);
X#endif
X RefreshWindowFrame(NV_Window);
X break;
X
X case DOWN_BUTTON: ScrollDown(UPDATESLIDER);
X break;
X
X case UP_BUTTON: ScrollUp(UPDATESLIDER);
X break;
X
X case VERT_SLIDER: /* STOP receiving mouse move events */
X ReportMouse(FALSE,NV_Window);
X MoveSlider();
X SetCurrentItem(Wind_FirstItem+CurrentRow);
X break;
X
X default: printf("Errr!!, what happenned?? ID = %d\n",gad->GadgetID);
X break;
X }
X}
END_OF_FILE
if test 9132 -ne `wc -c <'Gadgets.c'`; then
echo shar: \"'Gadgets.c'\" unpacked with wrong size!
fi
# end of 'Gadgets.c'
fi
if test -f 'Globals.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Globals.h'\"
else
echo shar: Extracting \"'Globals.h'\" \(3424 characters\)
sed "s/^X//" >'Globals.h' <<'END_OF_FILE'
X/* ======================================================================= */
X/* */
X/* PROGRAM: News Viewer */
X/* */
X/* VERSION: 2.3a */
X/* */
X/* */
X/* FILENAME: Globals.h */
X/* */
X/* DESCRIPTION: This header file declares all the globals which are used */
X/* by all modules in the program. */
X/* */
X/* AUTHOR: Richard Frost & Robert Wozniak Copyright 1990 */
X/* */
X/* DATE: 31st March 1990 */
X/* */
X/* ======================================================================= */
X
X
X /* -------------- G l o b a l s -------------- */
X#ifdef MAIN
X# define EXTERN
X#else
X# define EXTERN extern
X#endif
X
X
X /* THE NEWS ITEM STRUCTURE */
X
Xtypedef struct item
X {
X struct item *next;
X char *Filename; /* ACTUAL Filename of that newsitem */
X char *PrintedFilename; /* Filename that is DISPLAYED on the window */
X char *Subject; /* String for the "subject:" title */
X char *Filesize; /* The Size of the news item in BYTES */
X ULONG FileBytes; /* NewsItem's size in bytes. */
X
X UBYTE compact; /* "Subject:" compaction offset (0=none) */
X
X UBYTE Status; /* Can be either READ or UNREAD */
X
X UBYTE fname_len;
X UBYTE fsize_len;
X UBYTE fsubj_len;
X
X UBYTE Pad; /* Padding for alignment */
X } ITEM;
X
X
X
X#ifdef MAIN
X
X/*FILE *fp = NULL;*/
X
XSHORT NumItems = 0; /* # of items in the NewsItem array */
XSHORT ClickSelect = 2; /* # of mouse clicks reqd. to select an item */
X
XBOOL ShowNames = TRUE;
XBOOL ShowSizes = TRUE;
XBOOL CaseSensitive = TRUE;
X
Xstruct Window *NV_Window = NULL;
X
XITEM **ItemList = NULL;
X
X#else
X
XEXTERN FILE *fp;
XEXTERN SHORT NumItems;
XEXTERN SHORT ClickSelect;
XEXTERN BOOL ShowNames;
XEXTERN BOOL ShowSizes;
XEXTERN BOOL UseFileComms;
XEXTERN BOOL CaseSensitive;
XEXTERN ITEM **ItemList; /* Array of pointers to ITEM structures */
XEXTERN struct Window *NV_Window;
X
X#endif
X
X
X#ifdef MAIN
Xstruct Library *IntuitionBase=NULL;
Xstruct Library *GfxBase=NULL;
Xstruct Library *DosBase=NULL;
X/*struct Library *IconBase=NULL;*/
X#else
XEXTERN struct Library *IntuitionBase;
XEXTERN struct Library *GfxBase;
XEXTERN struct DosBase *DosBase;
XEXTERN struct Library *IconBase;
X
X#endif
X
X#define READ 1
X#define UNREAD 0
X
X
X /* GLOBAL SWITCH TO ACTIVATE ROBERT'S CODE */
X
X#define ROBERTS_CODE
X /* -------------- E n d G l o b a l s -------------- */
END_OF_FILE
if test 3424 -ne `wc -c <'Globals.h'`; then
echo shar: \"'Globals.h'\" unpacked with wrong size!
fi
# end of 'Globals.h'
fi
if test -f 'Main.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Main.c'\"
else
echo shar: Extracting \"'Main.c'\" \(8782 characters\)
sed "s/^X//" >'Main.c' <<'END_OF_FILE'
X/* ======================================================================= */
X/* */
X/* PROGRAM: News Viewer */
X/* */
X/* VERSION: 2.3 */
X/* */
X/* */
X/* FILENAME: Main.c */
X/* */
X/* DESCRIPTION: Major routine that gets everything started and handles */
X/* input events from Intuition and the shutdown of the */
X/* program. */
X/* */
X/* AUTHOR: Richard Frost (C) 1990 */
X/* */
X/* DATE: 3rd April 1990 */
X/* */
X/* ======================================================================= */
X
X#define MAIN
X#include "Defs.h"
X#include "Globals.h"
X#include "Display.h"
X#include "Gadgets.h"
X#include "Select.h"
X#include "Request.h"
X#include "CreateFileList.h"
X#include "WBench.h"
X
X /* DBUG macros... */
X#define DBUG_OFF
X
X#ifdef DBUG_ON
X# define PRinit dbout = fopen("CON:210/12/200/200/DBUG OUTPUT->MAIN","w")
X# define PR(c) if (dbout) { fprintf(dbout,(c)); fprintf(dbout,"..."); }
X# define PRret if (dbout) fprintf(dbout,"Done.\n")
X# define PRend if (dbout) fclose(dbout)
XFILE* dbout;
X#else
X# define PRinit
X# define PR(c)
X# define PRret
X# define PRend
X#endif
X
Xextern struct Library *OpenLibrary();
Xextern struct Message *GetMsg();
X
X
X
X/* ======================================================================= */
X/* OpenLibs */
X/* ======================================================================= */
X
XVOID OpenLibs()
X{
X
X IntuitionBase = OpenLibrary("intuition.library",0L);
X if (IntuitionBase == NULL)
X ShutDown("Could not open Intuition Library!",FALSE);
X
X GfxBase = OpenLibrary("graphics.library",0L);
X if (GfxBase == NULL)
X ShutDown("Could not open Graphics Library!",FALSE);
X}
X
X/* ======================================================================= */
X/* HandleMenu */
X/* ======================================================================= */
X
X/* Sort out all menu events */
X
XVOID HandleMenu(menu, item, subitem)
XUSHORT menu, item, subitem;
X{
X
X#define Toggle(v) ((v==TRUE) ?(v=FALSE) :(v=TRUE ))
X
X switch(menu)
X {
X case PROJECT_MENU :
X if (item == QUIT_ITEM)
X ShutDown("Thats all folks!",TRUE);
X break;
X
X case SETTINGS_MENU :
X {
X switch(item)
X {
X case CLICK_ITEM:
X if (subitem == SINGLE_SITEM)
X ClickSelect = 1;
X else
X ClickSelect = 2;
X break;
X
X case SUBJCOL_ITEM:
X SubjColour = subitem;
X ClearWindow();
X RedrawWindow();
X break;
X
X case SIZECOL_ITEM:
X SizeColour = subitem;
X ClearWindow();
X RedrawWindow();
X break;
X
X case BGNDCOL_ITEM:
X BgndColour = subitem;
X ClearWindow();
X RedrawWindow();
X break;
X
X case STRSRCH_ITEM:
X if (subitem == SENS_SITEM)
X CaseSensitive = TRUE;
X else
X CaseSensitive = FALSE;
X break;
X }
X }
X break;
X
X case NEWSITEM_MENU :
X {
X switch(item)
X {
X case SHOW_ITEM:
X if (subitem == NAME_SITEM)
X Toggle(ShowNames);
X else
X Toggle(ShowSizes);
X RedrawWindow();
X break;
X
X case SEARCH_ITEM:
X ErrorMsg("Sorry!! Not Implemented .. yet!");
X break;
X
X case UNREAD_ITEM:
X if (UserChoice("Really UNREAD ALL news items?") == TRUE)
X UnreadAll();
X break;
X
X }
X }break;
X
X case HISTORY_MENU :
X if (item == UPDATE_ITEM)
X ErrorMsg("Not Implemented! Delete \".nv\" file.");
X break;
X
X case ABOUT_MENU :
X AboutRequester();
X break;
X
X } /* end switch */
X
X}
X
X/* ======================================================================== */
X/* M a i n */
X/* ======================================================================== */
X
Xmain (argc,argv)
Xint argc;
Xchar *argv[];
X{
X BOOL MouseMoved = FALSE,
X EndProgram = FALSE;
X SHORT x,selrow;
X USHORT qualif; /* Message class from Intuition */
X LONG secs,mics;
X ULONG class,code; /* Menu code from Intuition */
X
X struct IntuiMessage *message;
X struct Gadget *gadptr;
X
X extern int Enable_Abort; /* Aztec's CONTROL-C DISABLE variable */
X
X
X
X
X /* DISABLE CONTROL-C INTERRUPTS */
X Enable_Abort = 0;
X
X OpenLibs();
X
X PRinit;
X
X PR("CreateFileList..\n");
X
X NumItems = CreateFileList(argc,argv); /* Call Rob's code to set up lists etc. */
X
X PR("CloseMsgWindow...");
X CloseMsgWindow(); /* Delete the Initial Requester IF its still up! */
X PR("CMW Alldone\n");
X
X PR("MakeWindow");
X MakeWindow(); PRret;
X
X PR("SetGlobalVars");
X SetGlobalVars(); PRret;
X
X PR("SetWindowVars");
X SetWindowVars(); PRret;
X
X PR("ClearWindow");
X ClearWindow(); PRret;
X
X PR("RedrawWindow");
X RedrawWindow(); PRret;
X
X PR("SetKnobPos");
X SetKnobPos(); PRret;
X
X PR("SetKnobSize");
X SetKnobSize(); PRret;
X
X PR("DrawArrow");
X DrawArrow(); PRret;
X
X
X /* Initialize the DEFAULT VIEWER window size! */
X
X InitDV(NV_Window->TopEdge,NV_Window->LeftEdge,
X NV_Window->Width,NV_Window->Height);
X
X
X
X /* MAIN PROGRAM MAJOR EVENT LOOP! */
X
X
X for (;;) /* INFINITE LOOP!! */
X {
X /* Wait until a signal occurs... */
X Wait(1L << NV_Window->UserPort->mp_SigBit);
X
X MouseMoved= FALSE;
X
X while( message = (struct IntuiMessage *) GetMsg(NV_Window->UserPort) )
X {
X
X /* If a message was recieved .... */
X
X class = message->Class; /* Store the message class! */
X code = message->Code; /* Store the code */
X qualif = message->Qualifier; /* Store the qualifier */
X secs = message->Seconds;
X mics = message->Micros;
X /* Store away the Gadget address */
X gadptr = (struct Gadget *) message->IAddress;
X
X ReplyMsg(message);
X
X
X
X /* Here is the 'case' statement which SORTS OUT all incoming MESSAGES */
X
X switch (class)
X {
X
X#ifdef KEYS
X case RAWKEY: HandleKey(code,qualif);
X break;
X#endif
X
X case INACTIVEWINDOW: /* The user just unselected my window!!! */
X break;
X
X case NEWSIZE:
X SetWindowVars();
X /* There is NO EraseArrow() as it is
X not needed due to ClearWindow() &&
X EraseArrow() can write on the gadgets for some
X window re-sizes!
X */
X ClearWindow();
X SyncDisplay();
X DrawArrow();
X SetKnobPos();
X SetKnobSize();
X break;
X
X case GADGETDOWN:
X StartSelectGadget(gadptr);
X break;
X
X case GADGETUP:
X EndSelectGadget(gadptr);
X break;
X
X case MOUSEMOVE :
X MouseMoved = TRUE;
X break;
X
X case MOUSEBUTTONS:
X switch (code)
X {
X
X case SELECTDOWN:
X if (TouchedItem(&selrow) == TRUE)
X SelectMouse(selrow,secs,mics);
X break;
X
X case SELECTUP:
X break;
X }
X break;
X
X case MENUPICK:
X if (MENUNUM(code) != MENUNULL)
X HandleMenu(MENUNUM(code),ITEMNUM(code),SUBNUM(code));
X break;
X
X
X case CLOSEWINDOW:
X EndProgram = TRUE;
X break;
X
X }/* end Switch */
X
X
X } /*end While Loop */
X
X if (MouseMoved)
X MoveSlider(); /* A slider has moved */
X
X if (EndProgram) break;
X
X }/* end infinite FOR LOOP */
X
X ShutDown("Thats all folks!",TRUE);
X}
END_OF_FILE
if test 8782 -ne `wc -c <'Main.c'`; then
echo shar: \"'Main.c'\" unpacked with wrong size!
fi
# end of 'Main.c'
fi
if test -f 'Requester/Requester.pw.uu' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Requester/Requester.pw.uu'\"
else
echo shar: Extracting \"'Requester/Requester.pw.uu'\" \(3839 characters\)
sed "s/^X//" >'Requester/Requester.pw.uu' <<'END_OF_FILE'
Xbegin 666 Requester.pw
XM4&]W97)7:6YD;W=S('8R+C4@+"`@:6UP;W)T960@8GD@455!4E1%6"!C<F%C1
XM:RUT96-H;F]L;V=I97,@,3DX."`@("`@("`@("`@```#_0````D@`8#_````?
XM`0`````!``````YR86TZ4F5Q1V%D<RYH```````````!``,0```"$&@`!0`%?
XM_____P`````````````````````````````````$`/@3F``!`````0`!`P"8!
XM`!X!:`!Z``4`!?____\````!```C<8``#/_L`$H`#P`.``,``0#X:B``^__@:
XM````````````````````(K.H_____P,```4`(W$T````````````2P```$L`?
XM$````!````````````!*``\``@`!Q+@#``````````$L`````````````#__F
XM_________0`___________H`/__Q^/___Y_]`#__F.#___^/^@`__QQN/\8QC
XMC_T`/_X^<QS.,8_Z`#_^/GP9QG&/_0`__QYFFN:QG_H`/_^,8PQ#,9_]`#__$
XM\.,<9S./^@`__\'____A#_T`/_______@Y_Z`#555555555550``````````N
XM````____________P,```````````\#/___________`S_\/Q____O__P,_^L
XMYY____Q__\#/_?.1^#G.?__`S_GYC/<QSG__P,_Y^8/F.8[__\#/_/N991E/G
XM___`S_YWG/.\SO__P,__#____\Q__\#/______X>___`S___________P-__'
XM_________\#____________```````!*``\``@`"WL`#``````````$L````;
XM`````````````````````0`%5555555555<`"JJ@J*JJJHJO``55$$!5554%1
XM5P`*J@@J*H(@BJ\`!504411$$057``JJ*B@(@B"*KP`%511$$$01%5<`"JJ(M
XM(@@"((JO``554$$411$%5P`*JH"JJJJ@"J\`!5555555`157`!__________T
XM_P``````````````____________P/___________L#___________C`__]?Y
XMU______XP/_^[[____[_^,#__??5_7W??_C`__O[KO^[[O_XP/_]_=?W?=__E
XM^,#__ON[[[OO__C`__]WW??]W__XP/__K____^[_^,#_______]?__C`____S
XM_______XP.```````````,#____________`````"``(``<`^&E0`/AQ8`#X3
XM<<@`^'*@`"!9:``@6[`````(3VMA>4=A9``````!``````$`````"4]+05E?5
XM1T%$``````$``````0``(W'8_ZK_[`!*``\`'@`#``$`(9F0`"+)Z```````F
XM`````````````"+-H/____\#```%`"-QO````````````$L```!+`!`````09
XM````````````2@`/``(``M_X`P`````````!+``````````````_________=
XM__T`/__________Z`#___'____^?_0`__^8_____C_H`/__''XS'XX_]`#__-
XMCXS=9A&/^@`__X^8SF/!C_T`/__'F,QF,9_Z`#__XQ\/A^&?_0`___P\'`\#K
XMC_H`/__P?_Q__P_]`#_____\?_^?^@`U55555555554``````````````/__F
XM_________\#```````````/`S___________P,__P_____[__\#/_[G____\-
XM?__`S_]\^',\'G__P,_^?G<BF>Y__\#/_GYG,9X^___`S_\^YW.[S___P,__M
XMG?#P?![__\#/_\/_\__\?__`S_____/__O__P,___________\#?________K
XM___`____________P```````2@`/``(``N$P`P`````````!+```````````3
XM``````````````$`!55555555557``JJJ"JJJJJ*KP`%54055555!5<`"JJ"Q
XM"HB"HHJO``55!0151!$%5P`*JHJ(BB*`BJ\`!55%$$1$$157``JJH@H*@J"*-
XMKP`%5504%`4!!5<`"JJ@*J@JJ@JO``55555455455P`?__________\`````?
XM`````````/___________\#___________[`___________XP/__U_______M
XM^,#__[O____^__C`__]]_7=]7W_XP/_^_O^JN^[_^,#__W]W==]___C`__^^C
XM[_N[[__XP/__W?7U?5__^,#__^O_^__^__C`______?____XP/__________:
XM^,#@``````````#`____________P`````@`&``'`"!Q@``@?0``('W(`"!^G
XMD``A2+@`(4GH````"$]O<'-'860``````0`````!``````E/3U!37T=!1```O
XM```!``````$``"-RV``-`!T!3`!!`````P`!`"-R!```````````````````$
XM``#__P`C#-#_____`@,!!0`C<A0```````````%-```!30!"````0@``````-
XM````````"P````$`(9$H`"&18``BL`@`(R7P`",I^``C<C`````'0F]R9&5RX
XM``````$``````0`````!``````$``````0```````'<`!P""`!``!P`#``$`@
XM(W)``````````````````````/__`"-R8/____\#```%`"-S%```````````V
XM`(,```"#`!$````1````````````@@`0``(``N)H`P`````````"0/______(
XM_________/_____``/\_S________\_S\______``/_/\_________/Y^?__(
XM___``/^?Y________^?S_______``/^?Y________^?S_______``/\_S___Q
XM_____^?/_______``/\[[^?Y__\__^?/S_/\___``/YS_Y[YYYSG_^?_S\]\4
XM\\_``/YS_SSY_YSG_^?_SYY\_\_``/SS_GSS__G__\__GSYY___``/SY_G_YD
XM__S__^?_GS_\___``/GY_/_S__\__\__/G_Y___``/GY_/_SY_.?_\__/G_YQ
XM\__``//Y_//SS^<__\_^?GGYY__``,_\_G_SS^?__\_\_S_YY__``/______I
XM_______________``/_______________\_____``/_^?Y_________/SY__&
XM___``/__/G________^?/Y_____``/_W//________\^?______``/_W//__!
XM______\^?______``/_G.?________\Y_______``/_GF?^?Y[G^?_\Y_G_/^
XM\]S``/_/D_F?GF><__\G_/S/SS/``/_/D_//GF><__\G_/GGSS/``/^?I^>?I
XM),_G__Y/^?//DF?``/^?Y_^?II_S__^?^?_/TT_``/\_S\__S3_S__\_\^?_K
XMYI_``/\_S\__GSYS__\_\^?_SY_``/Y_G\Y_//SG__S_Y^<_GG_``/^?G_S_8
XM//_/__S_\_Y_GG_``/_____________________``````"@``P`!`"-S,``C6
XM<T``(W-0`"-S8``C<W``(W.`````"$Y65&ET;&4``````0`````!``````$`<
X*`````0`````!```CE
X``
Xend
Xsize 2710
END_OF_FILE
if test 3839 -ne `wc -c <'Requester/Requester.pw.uu'`; then
echo shar: \"'Requester/Requester.pw.uu'\" unpacked with wrong size!
fi
# end of 'Requester/Requester.pw.uu'
fi
if test -f 'ShutDown.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'ShutDown.c'\"
else
echo shar: Extracting \"'ShutDown.c'\" \(4337 characters\)
sed "s/^X//" >'ShutDown.c' <<'END_OF_FILE'
X/* ======================================================================= */
X/* */
X/* PROGRAM: News Viewer */
X/* */
X/* VERSION: 2.3 */
X/* */
X/* */
X/* FILENAME: ShutDown.c */
X/* */
X/* DESCRIPTION: Major routine that deallocates EVERYTHING, closes all */
X/* libraries and unlocks the directory. */
X/* */
X/* AUTHORS: Robert Wozniak & Richard Frost (C) 1990 */
X/* */
X/* DATE: 1st April 1990 */
X/* */
X/* ======================================================================= */
X
X#include <stdio.h>
X#include <libraries/dos.h>
X#include <libraries/dosextens.h>
X
X#include "Globals.h"
X#include "Request.h"
X#include "WBench.h"
X#include "CreateFileList.h"
X#include "WindData.h"
X
X
X
X
Xvoid WalkList();
Xvoid SaveNVfile();
X
X/* ------------------------ Subroutine to close everything and end ---------------*/
XVOID ShutDown(mess,state)
XUBYTE *mess;
XBOOL state;
X{
X
X int t;
X ITEM *old,*new;
X
X
X if (mess != NULL && state == FALSE)
X ErrorRequester(mess); /* Print error (if any) */
X
X SaveReadHistory();
X
X if (dirlock && WBlock != TRUE) UnLock(dirlock);
X
X if (did_cd == TRUE) CurrentDir(old_cd);
X
X
X if (my_fhand) Close(my_fhand);
X
X
X /* Clear the menu strip BEFORE closing the window!! ... WANNA GURU???? :-) */
X
X ClearMenuStrip(NV_Window,&Menu1);
X
X if (NV_Window != NULL) CloseWindow(NV_Window);
X
X
X WalkList();
X
X CloseMsgWindow();
X
X if (DosBase) CloseLibrary(DosBase);
X if (IconBase) CloseLibrary(IconBase);
X
X if (my_fib) FreeMem( my_fib, sizeof(struct FileInfoBlock));
X if (ItemList) FreeMem( ItemList, Items * sizeof(ITEM *));
X
X /* Close the Libaries safely! */
X
X if (IntuitionBase != NULL) CloseLibrary(IntuitionBase);
X if (GfxBase != NULL) CloseLibrary(GfxBase);
X
X exit(state);
X}
X
Xvoid WalkList()
X{
X/***************** Walk the Item list, freeing as we go *****************
X
X (note we can't use the pointer array as it may not have been
X built before the half finished list aborted ) */
X
Xregister ITEM *old,*new;
X
X for( new=old = firsti.next; new; )
X {
X /* Have to grab next pointer before current ("old") struct dissapears! */
X /* printf("Walk %d: %d\n",t,old); */
X new = old -> next;
X
X FreeMem( old->Filename,strlen( old->Filename) +1 );
X FreeMem( old->PrintedFilename,strlen(old->PrintedFilename)+1);
X FreeMem( old->Filesize,strlen( old->Filesize) +1 );
X
X if (old->compact == 0) /* It has an Alloc'ed string, not a just pointer */
X FreeMem( old->Subject ,strlen( old->Subject) +1 );
X
X FreeMem( old,sizeof(ITEM));
X old = new;
X }
X}
X
X
X
X/* -------------------------------------------------------------------------*/
X SaveReadHistory()
X/* -------------------------------------------------------------------------*/
X
X{
X register int t;
X register FILE *fpunr;
X
X if (Items >0) /* SAVE ONLY IF THERE ARE ITEMS!!!!!!! */
X {
X if ( (fpunr = fopen(".unr","w")) == 0 ) {
X ErrorRequester("Couldn't open .unread to save");
X return 0;
X }
X
X
X StatMsg("Updating .unread file ...");
X
X for(t=0; t<Items; t++)
X {
X fprintf(fpunr,"%s %d\n",ItemList[t]-> Filename, ItemList[t]-> Status );
X }
X
X fclose(fpunr);
X StatMsg(".unread file saved");
X
X SaveInfoFile(".unr");
X return 1;
X }
X
X return 0;
X}
X
END_OF_FILE
if test 4337 -ne `wc -c <'ShutDown.c'`; then
echo shar: \"'ShutDown.c'\" unpacked with wrong size!
fi
# end of 'ShutDown.c'
fi
if test -f 'ViewGads.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'ViewGads.h'\"
else
echo shar: Extracting \"'ViewGads.h'\" \(5160 characters\)
sed "s/^X//" >'ViewGads.h' <<'END_OF_FILE'
X
Xstatic USHORT DVImageData1[] = {
X 0xFFFF,0xFF3F,0xFF3F,0xFFF3,0xFFE7,0xFFCF,0xFF9F,0xFF3F,
X 0xFF7F,0xFFFF,0xC003,0xFFFF,0xF9FF,0xF9FF,0x9FFF,0xCFFF,
X 0xE7FF,0xF3FF,0xF9FF,0xFCFF,0xFFFF,0xFFFF
X};
X
Xstatic struct Image DVImage1 = {
X 0,0, /* XY origin relative to container TopLeft */
X 16,11, /* Image width and height in pixels */
X 2, /* number of bitplanes in Image */
X DVImageData1, /* pointer to ImageData */
X 0x0003,0x0000, /* PlanePick and PlaneOnOff */
X NULL /* next Image structure */
X};
X
Xstatic USHORT DVImageData2[] = {
X 0xFFFF,0xF9FF,0xF9FF,0x8AAF,0xC55F,0xE2BF,0xF17F,0xF8FF,
X 0xFDFF,0xFFFF,0xC003,0xFFFF,0xFF3F,0xFF3F,0xFFF3,0xFFE7,
X 0xFFCF,0xFF9F,0xFF3F,0xFE7F,0xFFFF,0xFFFF
X};
X
Xstatic struct Image DVImage2 = {
X 0,0, /* XY origin relative to container TopLeft */
X 16,11, /* Image width and height in pixels */
X 2, /* number of bitplanes in Image */
X DVImageData2, /* pointer to ImageData */
X 0x0003,0x0000, /* PlanePick and PlaneOnOff */
X NULL /* next Image structure */
X};
X
Xstatic struct Gadget DVDownButton = {
X NULL, /* next gadget */
X -15,-19, /* origin XY of hit box relative to window TopLeft */
X 16,11, /* hit box width and height */
X GADGHIMAGE+GADGIMAGE+GRELBOTTOM+GRELRIGHT, /* gadget flags */
X RELVERIFY+GADGIMMEDIATE+RIGHTBORDER, /* activation flags */
X BOOLGADGET, /* gadget type flags */
X (APTR)&DVImage1, /* gadget border or image to be rendered */
X (APTR)&DVImage2, /* alternate imagery for selection */
X NULL, /* first IntuiText structure */
X NULL, /* gadget mutual-exclude long word */
X NULL, /* SpecialInfo structure */
X DOWNBUTTON, /* user-definable data */
X NULL /* pointer to user-definable data */
X};
X
Xstatic USHORT DVImageData3[] = {
X 0xFFFF,0xFF7F,0xFF3F,0xFF9F,0xFFCF,0xFFE7,0xFFF3,0xFF3F,
X 0xFF3F,0xFFFF,0xC003,0xFFFF,0xFCFF,0xF9FF,0xF3FF,0xE7FF,
X 0xCFFF,0x9FFF,0xF9FF,0xF9FF,0xFFFF,0xFFFF
X};
X
Xstatic struct Image DVImage3 = {
X 0,0, /* XY origin relative to container TopLeft */
X 16,11, /* Image width and height in pixels */
X 2, /* number of bitplanes in Image */
X DVImageData3, /* pointer to ImageData */
X 0x0003,0x0000, /* PlanePick and PlaneOnOff */
X NULL /* next Image structure */
X};
X
Xstatic USHORT DVImageData4[] = {
X 0xFFFF,0xFDFF,0xF8FF,0xF17F,0xE2BF,0xC55F,0x8AAF,0xF9FF,
X 0xF9FF,0xFFFF,0xC003,0xFFFF,0xFE7F,0xFF3F,0xFF9F,0xFFCF,
X 0xFFE7,0xFFF3,0xFF3F,0xFF3F,0xFFFF,0xFFFF
X};
X
Xstatic struct Image DVImage4 = {
X 0,0, /* XY origin relative to container TopLeft */
X 16,11, /* Image width and height in pixels */
X 2, /* number of bitplanes in Image */
X DVImageData4, /* pointer to ImageData */
X 0x0003,0x0000, /* PlanePick and PlaneOnOff */
X NULL /* next Image structure */
X};
X
Xstatic struct Gadget DVUpButton = {
X &DVDownButton, /* next gadget */
X -15,-30, /* origin XY of hit box relative to window TopLeft */
X 16,11, /* hit box width and height */
X GADGHIMAGE+GADGIMAGE+GRELBOTTOM+GRELRIGHT, /* gadget flags */
X RELVERIFY+GADGIMMEDIATE+RIGHTBORDER, /* activation flags */
X BOOLGADGET, /* gadget type flags */
X (APTR)&DVImage3, /* gadget border or image to be rendered */
X (APTR)&DVImage4, /* alternate imagery for selection */
X NULL, /* first IntuiText structure */
X NULL, /* gadget mutual-exclude long word */
X NULL, /* SpecialInfo structure */
X UPBUTTON, /* user-definable data */
X NULL /* pointer to user-definable data */
X};
X
Xstatic struct PropInfo DVDVSliderSInfo = {
X AUTOKNOB+FREEVERT, /* PropInfo flags */
X -1,-1, /* horizontal and vertical pot values */
X -1,-1, /* horizontal and vertical body values */
X};
X
Xstatic struct Image DVImage5 = {
X 0,0, /* XY origin relative to container TopLeft */
X 8,52, /* Image width and height in pixels */
X 0, /* number of bitplanes in Image */
X NULL, /* pointer to ImageData */
X 0x0000,0x0000, /* PlanePick and PlaneOnOff */
X NULL /* next Image structure */
X};
X
Xstatic struct Gadget DVSlider = {
X &DVUpButton, /* next gadget */
X -15,10, /* origin XY of hit box relative to window TopLeft */
X 16,-41, /* hit box width and height */
X GRELRIGHT+GRELHEIGHT, /* gadget flags */
X RELVERIFY+GADGIMMEDIATE+FOLLOWMOUSE+RIGHTBORDER, /* activation flags */
X PROPGADGET, /* gadget type flags */
X (APTR)&DVImage5, /* gadget border or image to be rendered */
X NULL, /* alternate imagery for selection */
X NULL, /* first IntuiText structure */
X NULL, /* gadget mutual-exclude long word */
X (APTR)&DVDVSliderSInfo, /* SpecialInfo structure */
X SLIDER, /* user-definable data */
X NULL /* pointer to user-definable data */
X};
X
X#define DVGadgetList1 DVSlider
X
Xstatic struct NewWindow DVNewWindowStructure1 = {
X 37,36, /* window XY origin relative to TopLeft of screen */
X 513,97, /* window width and height */
X 1,3, /* detail and block pens */
X NEWSIZE+MOUSEBUTTONS+MOUSEMOVE+GADGETDOWN+GADGETUP+CLOSEWINDOW, /* IDCMP flags */
X WINDOWSIZING+WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE+SIZEBRIGHT+ACTIVATE+RMBTRAP+NOCAREREFRESH, /* other window flags */
X &DVSlider, /* first gadget in gadget list */
X NULL, /* custom CHECKMARK imagery */
X NULL, /* window title */
X NULL, /* custom screen pointer */
X NULL, /* custom bitmap */
X 100,54, /* minimum width and height */
X -1,-1, /* maximum width and height */
X WBENCHSCREEN /* destination screen type */
X};
X
X
X/* end of PowerWindows source generation */
END_OF_FILE
if test 5160 -ne `wc -c <'ViewGads.h'`; then
echo shar: \"'ViewGads.h'\" unpacked with wrong size!
fi
# end of 'ViewGads.h'
fi
if test -f 'WBench.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'WBench.c'\"
else
echo shar: Extracting \"'WBench.c'\" \(8885 characters\)
sed "s/^X//" >'WBench.c' <<'END_OF_FILE'
X/* ======================================================================= */
X/* */
X/* PROGRAM: News Viewer */
X/* */
X/* VERSION: 2.3a */
X/* */
X/* */
X/* FILENAME: WBench.c */
X/* */
X/* DESCRIPTION: This module contains routines that involve the WorkBench */
X/* such as obtaining the Lock to the directory which contains*/
X/* the icon hit & Loading and Saving .info files to obtain */
X/* user settings etc. */
X/* */
X/* AUTHOR: Richard Frost (C) 1990 */
X/* */
X/* DATE: 23rd March 1990 */
X/* */
X/* ======================================================================= */
X
X#include "Defs.h"
X#include "Globals.h"
X#include "Request.h"
X#include "CreateFileList.h"
X
X
Xstatic USHORT ImageData1[] = {
X 0xFFFF,0xFFFF,0xE000,0xABF1,0x0A7F,0xE000,0xFFF5,0x20FF,
X 0xE000,0xFFFF,0xFFFF,0xE000,0x5555,0x5555,0x4000,0xFFFF,
X 0xFFFF,0xE000,0xD558,0x0600,0x6000,0xEAB8,0x57FF,0xE000,
X 0xC019,0xE6AA,0xE000,0xFFF8,0x87FF,0xE000,0xC018,0x0600,
X 0x6000,0xFFFF,0xFE4D,0x6000,0xC018,0x0600,0x6000,0xFFFF,
X 0xFFFF,0xE000,0xC01A,0xD66A,0xE000,0xFFFF,0xFFE0,0xE000,
X 0xD5B8,0x07FF,0xE000,0xFFFF,0xFEA6,0xE000,0xC438,0x075D,
X 0xE000,0xFFFF,0xFEFF,0xE000,0xC038,0x0700,0xE000,0xFFFF,
X 0xFFFF,0xE000,0x0000,0x0000,0x0000,0x540E,0xF580,0x0000,
X 0x000A,0xDF00,0x0000,0x0000,0x0000,0x0000,0xAAAA,0xAAAA,
X 0xA000,0x0000,0x0000,0x0000,0x2AA7,0xF9FF,0x8000,0x1547,
X 0xA800,0x0000,0x3FE6,0x1955,0x0000,0x0007,0x7800,0x0000,
X 0x3FE7,0xF9FF,0x8000,0x0000,0x01B2,0x8000,0x3FE7,0xF9FF,
X 0x8000,0x0000,0x0000,0x0000,0x3FE5,0x2995,0x0000,0x0000,
X 0x001F,0x0000,0x2A47,0xF800,0x0000,0x0000,0x0159,0x0000,
X 0x3BC7,0xF8A2,0x0000,0x0000,0x0100,0x0000,0x3FC7,0xF8FF,
X 0x0000,0x0000,0x0000,0x0000
X};
X
Xstatic struct Image Image1 = {
X 0,0, /* XY origin relative to container TopLeft */
X 35,22, /* Image width and height in pixels */
X 2, /* number of bitplanes in Image */
X ImageData1, /* pointer to ImageData */
X 0x0003,0x0000, /* PlanePick and PlaneOnOff */
X NULL /* next Image structure */
X};
X
Xstatic USHORT ImageData2[] = {
X 0xFFF9,0xFFFF,0xE000,0xABF0,0x4180,0x6000,0xFFF9,0x1FFF,
X 0xE000,0xFFF1,0xC180,0x6000,0x5559,0xF1FF,0xE000,0xFFF1,
X 0xFCA9,0x6000,0xD559,0xFF1F,0xE000,0xEAB1,0xFFC0,0x6000,
X 0xC019,0xFFF1,0xE000,0xFFF1,0xFFFC,0x6000,0xC019,0xFFFF,
X 0x2000,0xFFF0,0x0000,0x0000,0xC019,0x56AA,0xE000,0xFFFF,
X 0xFFFF,0xE000,0xC01A,0xD66A,0xE000,0xFFFF,0xFFE0,0xE000,
X 0xD5B8,0x07FF,0xE000,0xFFFF,0xFEA6,0xE000,0xC438,0x075D,
X 0xE000,0xFFFF,0xFEFF,0xE000,0xC038,0x0700,0xE000,0xFFFF,
X 0xFFFF,0xE000,0x0006,0x0000,0x0000,0x540F,0xBE7F,0x8000,
X 0x0006,0xE000,0x0000,0x000E,0x3E7F,0x8000,0xAAA6,0x0E00,
X 0x0000,0x000E,0x0356,0x8000,0x2AA6,0x00E0,0x0000,0x154E,
X 0x003F,0x8000,0x3FE6,0x000E,0x0000,0x000E,0x0003,0x8000,
X 0x3FE6,0x0000,0xC000,0x000F,0xFFFF,0xE000,0x3FE6,0xA955,
X 0x0000,0x0000,0x0000,0x0000,0x3FE5,0x2995,0x0000,0x0000,
X 0x001F,0x0000,0x2A47,0xF800,0x0000,0x0000,0x0159,0x0000,
X 0x3BC7,0xF8A2,0x0000,0x0000,0x0100,0x0000,0x3FC7,0xF8FF,
X 0x0000,0x0000,0x0000,0x0000
X};
X
Xstatic struct Image Image2 = {
X 0,0, /* XY origin relative to container TopLeft */
X 35,22, /* Image width and height in pixels */
X 2, /* number of bitplanes in Image */
X ImageData2, /* pointer to ImageData */
X 0x0003,0x0000, /* PlanePick and PlaneOnOff */
X NULL /* next Image structure */
X};
X
Xstatic struct Gadget Gadget1 = {
X NULL, /* next gadget */
X 33,21, /* origin XY of hit box relative to window TopLeft */
X 35,23, /* hit box width and height */
X GADGHIMAGE+GADGIMAGE, /* gadget flags */
X RELVERIFY+GADGIMMEDIATE, /* activation flags */
X BOOLGADGET, /* gadget type flags */
X (APTR)&Image1, /* gadget border or image to be rendered */
X (APTR)&Image2, /* alternate imagery for selection */
X NULL, /* first IntuiText structure */
X NULL, /* gadget mutual-exclude long word */
X NULL, /* SpecialInfo structure */
X NULL, /* user-definable data */
X NULL /* pointer to user-definable data */
X};
X
X/* PATCHES to PWindows output:
X
X 1) Added Gadget Activation flag: GADGIMMEDIATE
X 2) Increased the HITBOX HEIGHT of the Gadget to be 1 pixel higher than
X than height of the Image data.
X 3) Added STATIC infront of each struct
X*/
X
X#define DEBUG
X#ifdef DEBUG
Xchar *ToolTypes[] = { "WINDOW=CON:0/12/200/30/NewsView Vr2.3a Output","" };
X#endif
X
Xstruct DiskObject NV_Icon;
X
XBOOL WBlock=FALSE;
X
Xextern struct WBStartup *WBenchMsg;
X
X
X
X/* Return the Name of News Directory */
X
XPUBLIC struct FileLock *GetNewsDir()
X{
X struct FileLock *tlock1,*tlock2,*DupLock(),*Lock(),*UnLock(),*ParentDir();
X struct WBArg *arg;
X
X#define OLD
X
X#ifdef OLD
X WBlock = TRUE;
X#else
X WBlock = FALSE;
X#endif
X
X switch (WBenchMsg->sm_NumArgs)
X {
X case 1:
X#ifdef OLD
X arg = &WBenchMsg->sm_ArgList[0]; /* CLICKED NV icon ONLY */
X return (struct FileLock *) arg->wa_Lock;
X#else
X return (struct FileLock *) Lock("",ACCESS_READ);
X#endif
X
X case 2 :
X default:
X#ifdef OLD
X arg = &WBenchMsg->sm_ArgList[1]; /* Clicked .nv file? */
X return (struct FileLock *) arg->wa_Lock;
X#else
X arg = &WBenchMsg->sm_ArgList[1]; /* Clicked .nv file? */
X
X printf("Locking onto file: [%s]\n",arg->wa_Name);
X
X if ((tlock1 = Lock(arg->wa_Name,ACCESS_READ)) == NULL)
X {
X printf("Failed initial lock to icon file: %s",arg->wa_Name);
X return NULL;
X }
X
X if (Examine(tlock1,my_fib))
X {
X if ( my_fib->fib_EntryType < 0 ) /* A file argument! */
X {
X printf("A FILE ICON ARGUMENT!!\n");
X /* Obtain the lock to the parent dir of that file */
X
X tlock2 = ParentDir(tlock1);
X UnLock(tlock1);
X printf("GOT A LOCK TO ITS PARENT DIR = %8x!!\n",tlock2);
X return DupLock(tlock2);
X }
X else /* A Directory! */
X {
X printf("DIRECTORY ARGUMENT!!\n");
X UnLock(tlock1);
X return Lock(arg->wa_Name,ACCESS_READ);
X }
X }
X else
X {
X printf("Error in examining ICON file %s\n",arg->wa_Name);
X UnLock(tlock1);
X return NULL;
X }
X#endif
X
X }
X
X /* AT THIS POINT COULD READ THE .info FILE! */
X /* simply ReadInfoFile(arg->wa_name,DiskObj) */
X}
X
X/* Make the icon to save .. */
X
XPRIVATE VOID ConstructIcon(diskobj)
Xstruct DiskObject *diskobj;
X{
X /* Init all the disk object fields .. */
X
X diskobj->do_Magic = WB_DISKMAGIC;
X diskobj->do_Version = WB_DISKVERSION;
X diskobj->do_Gadget = Gadget1; /* <= STRUCTURE COPY */
X diskobj->do_Type = WBPROJECT;
X diskobj->do_DefaultTool = ":NV";
X
X#ifdef DEBUG
X diskobj->do_ToolTypes = ToolTypes;
X#else
X diskobj->do_ToolTypes = NULL;
X#endif
X
X diskobj->do_CurrentX = NO_ICON_POSITION;
X diskobj->do_CurrentY = NO_ICON_POSITION;
X diskobj->do_DrawerData = NULL; /* The icon does not open a window */
X diskobj->do_ToolWindow = NULL;
X diskobj->do_StackSize = NULL;
X}
X
X/* TEST to see if a file exists ... */
X
XPUBLIC BOOL FileExists(file)
Xchar *file;
X{
X struct FileLock *checklock,*Lock(),*UnLock();
X
X if ( (checklock = Lock(file,ACCESS_READ)) == NULL)
X return FALSE;
X else
X {
X UnLock(checklock);
X return TRUE;
X }
X}
X
X
X/* NOTE: I assume we are already in the directory that contains the icon */
X
XPUBLIC long SaveInfoFile(filename)
Xchar *filename;
X{
X char FileName[50]; /* 45 char filename .. BIG ENOUGH ??? */
X char err[40];
X struct FileLock *checklock,*Lock(),*UnLock();
X long status=NULL;
X
X
X
X if (IconBase == NULL) return 0; /* No Icon Library! */
X
X strcpy(FileName,filename);
X strcat(FileName,".info"); /* Get the REAL filename .info added */
X
X /* Does the icon exist already ??? see if we can Lock() it */
X /* If it does, then DONT save the icon */
X /* MAY change this later so SetUPs can be placed in the ToolTypes
X of the icon.
X */
X
X if ( (checklock = Lock(FileName,ACCESS_READ)) == NULL )
X {
X
X /* Aha, we have not saved an icon before! .. */
X
X ConstructIcon(&NV_Icon);
X
X status = PutDiskObject(filename,&NV_Icon);
X
X if (status == 0)
X {
X status = IoErr();
X sprintf(err,"PutDiskObject: Error code %2d\n",status);
X ErrorMsg(err);
X }
X
X return status;
X }
X else
X UnLock(checklock);
X}
X
END_OF_FILE
if test 8885 -ne `wc -c <'WBench.c'`; then
echo shar: \"'WBench.c'\" unpacked with wrong size!
fi
# end of 'WBench.c'
fi
echo shar: End of archive 2 \(of 6\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 4 5 6 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 6 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
--
Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
Mail comments to the moderator at <amiga-request@cs.odu.edu>.
Post requests for sources, and general discussion to comp.sys.amiga.