home *** CD-ROM | disk | FTP | other *** search
- #include <exec/types.h>
- #include <exec/memory.h>
- #include <exec/libraries.h>
- #include <dos/dos.h>
- #include <intuition/gadgetclass.h>
- #include <intuition/intuitionbase.h>
- #include <libraries/iffparse.h>
- #include <prefs/prefhdr.h>
- #include <prefs/font.h>
- #include <string.h>
-
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/gadtools.h>
- #include <proto/dos.h>
- #include <proto/iffparse.h>
- #include <proto/diskfont.h>
- #include <proto/graphics.h>
-
- #include "split.h"
-
- /* for debug purposes */
- #include <stdio.h>
-
- extern UWORD wwidth, wheight, wleft, wtop;
- extern VolumeList *vlist;
- extern STRPTR msg_warnfilenotproc, msg_warngadgets,
- msg_write, msg_chunkoffs, msg_chunksize, msg_chunknum, msg_chunkname,
- msg_file, msg_size, status_title, statname[];
- extern UBYTE chunk_number, status;
- extern ULONG chunkoffset, chunksize;
- extern STRPTR chunkname, filename;
- extern ULONG filesize;
- extern struct IntuitionBase *IntuitonBase;
-
- struct Gadget *glist, *gad, *vlist_gad, *chunk_gad, *chunknum_gad,
- *chunksize_gad, *chunkoffs_gad, *write_gad, *chunknam1_gad, *chunknam2_gad,
- *filenam1_gad, *filenam2_gad, *filesize_gad, *status_gad, *hide_gad, *quit_gad;
-
- STRPTR msg_hide, msg_quit;
-
- struct VisualInfo *vi;
- struct NewGadget newgdg = { 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0 };
- struct Screen *WBS;
- struct Library *GadToolsBase, *IFFParseBase, *DiskFontBase;
- struct DrawInfo *dri;
-
- struct IntuiText it = { 0, 0, 0, 0, 0, NULL, NULL, NULL };
- UWORD maxstrlen;
-
- UWORD CheckMax( STRPTR text, UWORD add_gdw, UWORD prev )
- {
- register UWORD ilength;
-
- it.IText = text;
- if ( ( ilength = IntuiTextLength( &it ) + add_gdw ) > prev )
- return( ilength );
- else
- return( prev );
- }
-
-
- char fontname[FONTNAMESIZE];
- struct TextAttr topazattr = { "topaz.font", 8, FS_NORMAL, FPF_ROMFONT };
- struct FontPrefs fp;
-
- BOOL setUpGadgets( void )
- {
- UWORD fontw = 8, fonth = 8;
-
- if ( GadToolsBase = OpenLibrary( "gadtools.library", 0L ) )
- {
- if ( DiskFontBase = OpenLibrary( "diskfont.library", 37L ) )
- {
- if ( IFFParseBase = OpenLibrary( "iffparse.library", 37L ) )
- {
- struct IFFHandle *iffhandle;
-
- if ( iffhandle = AllocIFF() )
- {
- ULONG intuiVersion = IntuitionBase->LibNode.lib_Version;
- if ( iffhandle->iff_Stream = Open( intuiVersion >= 39L ? "ENV:Sys/font.prefs" : "ENV:Sys/sysfont.prefs", MODE_OLDFILE ) )
- {
- InitIFFasDOS( iffhandle );
- if ( !OpenIFF( iffhandle, IFFF_READ ) )
- {
- struct TextFont *font;
-
- if ( !StopChunk( iffhandle, ID_PREF, ID_FONT ) )
- {
- ParseIFF( iffhandle, IFFPARSE_SCAN );
- if ( intuiVersion >= 39L )
- ParseIFF( iffhandle, IFFPARSE_SCAN );
-
- ReadChunkBytes( iffhandle, &fp, sizeof(struct FontPrefs) );
- strcpy( fontname, fp.fp_Name );
- topazattr.ta_Name = fontname;
- topazattr.ta_YSize = fp.fp_TextAttr.ta_YSize;
- topazattr.ta_Style = fp.fp_TextAttr.ta_Style;
- topazattr.ta_Flags = fp.fp_TextAttr.ta_Flags;
- fonth = topazattr.ta_YSize;
- if ( font = OpenDiskFont( &topazattr ) )
- {
- fontw = font->tf_XSize;
- CloseFont( font );
- }
- }
- CloseIFF( iffhandle );
- }
- Close( iffhandle->iff_Stream );
- }
- FreeIFF( iffhandle );
- }
- CloseLibrary( IFFParseBase );
- }
- CloseLibrary( DiskFontBase );
- }
-
- if ( WBS = LockPubScreen( NULL ) )
- {
- it.ITextFont = &topazattr;
-
- if ( vi = GetVisualInfoA( WBS, TAG_END ) )
- {
- newgdg.ng_Flags = NULL;
- newgdg.ng_VisualInfo = vi;
- newgdg.ng_TopEdge = WBS->BarHeight + 3;
- newgdg.ng_TextAttr = &topazattr;
- gad = CreateContext (&glist);
-
- /* Prima riga */
-
- newgdg.ng_LeftEdge = WBS->WBorLeft + 4;
- newgdg.ng_Width = ( 4 + VOLUMENODENAMELEN ) * fontw + 4;
- newgdg.ng_Height = fonth * 5 + 4;
- newgdg.ng_GadgetText = NULL;
- newgdg.ng_GadgetID = DOSLIST_GDG;
- vlist_gad = gad = CreateGadget( LISTVIEW_KIND, gad, &newgdg,
- GTLV_Labels, vlist,
- GTLV_ShowSelected, NULL,
- TAG_END );
-
- /* Seconda riga */
-
- newgdg.ng_Flags = PLACETEXT_IN;
- newgdg.ng_Height = fonth + 6;
- newgdg.ng_LeftEdge = WBS->WBorLeft + 4;
- newgdg.ng_TopEdge += fonth * 5 + 6;
- newgdg.ng_Width = fontw * 5 + 20;
- newgdg.ng_GadgetText = msg_chunknum;
- newgdg.ng_GadgetID = CHUNK_GDG;
- chunk_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
- TAG_END );
-
- newgdg.ng_Flags = PLACETEXT_LEFT;
- newgdg.ng_LeftEdge += gad->Width + 2;
- newgdg.ng_Width = fontw * 2 + 10;
- newgdg.ng_GadgetText = NULL;
- newgdg.ng_GadgetID = CHUNKNMB_GDG;
- chunknum_gad = gad = CreateGadget( NUMBER_KIND, gad, &newgdg,
- GTNM_Number, chunk_number,
- GTNM_Border, TRUE,
- TAG_END );
-
- newgdg.ng_LeftEdge += gad->Width + fontw * 4 + 22;
- newgdg.ng_Width = fontw * 8 + 12;
- newgdg.ng_GadgetText = msg_chunksize;
- newgdg.ng_GadgetID = CHUNKSIZE_GDG;
- chunksize_gad = gad = CreateGadget( INTEGER_KIND, gad, &newgdg,
- GTIN_Number, chunksize,
- STRINGA_Justification, STRINGRIGHT,
- TAG_END );
-
- newgdg.ng_LeftEdge += gad->Width + fontw * 4 + 34;
- newgdg.ng_Width = fontw * 8 + 12;
- newgdg.ng_GadgetText = msg_chunkoffs;
- newgdg.ng_GadgetID = CHUNKOFFS_GDG;
- chunkoffs_gad = gad = CreateGadget( INTEGER_KIND, gad, &newgdg,
- GTIN_Number, chunkoffset,
- STRINGA_Justification, STRINGRIGHT,
- TAG_END );
-
- /* Terza riga */
-
- newgdg.ng_Flags = PLACETEXT_IN;
- newgdg.ng_LeftEdge = WBS->WBorLeft + 4;
- newgdg.ng_TopEdge += fonth + 7;
- newgdg.ng_Width = fontw * 5 + 20;
- newgdg.ng_GadgetText = msg_write;
- newgdg.ng_GadgetID = WRITE_GDG;
- write_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
- TAG_END );
-
- newgdg.ng_LeftEdge += gad->Width + 2;
- newgdg.ng_Width = fontw * 6 + 14;
- newgdg.ng_GadgetText = msg_chunkname;
- newgdg.ng_GadgetID = CHUNKNAM1_GDG;
- chunknam1_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
- TAG_END );
-
- newgdg.ng_LeftEdge += fontw * 6 + 16;
- newgdg.ng_Width = 6 + chunkoffs_gad->LeftEdge + chunkoffs_gad->Width - newgdg.ng_LeftEdge /*fontw * 16 + 94 ...222*/;
- newgdg.ng_GadgetText = NULL;
- newgdg.ng_GadgetID = CHUNKNAM2_GDG;
- chunknam2_gad = gad = CreateGadget( STRING_KIND, gad, &newgdg,
- GTST_String, chunkname,
- TAG_END );
-
- /* Quarta riga */
-
- newgdg.ng_Flags = PLACETEXT_IN;
- newgdg.ng_LeftEdge = WBS->WBorLeft + 4;
- newgdg.ng_TopEdge += fonth + 7;
- newgdg.ng_Width = fontw * 5 + 20;
- newgdg.ng_GadgetText = msg_file;
- newgdg.ng_GadgetID = FILENAM1_GDG;
- filenam1_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
- TAG_END );
-
- newgdg.ng_LeftEdge += fontw * 6 + 14;
- newgdg.ng_Width = chunkoffs_gad->LeftEdge + chunkoffs_gad->Width - newgdg.ng_LeftEdge - fontw * 9 /* fontw * 25 + 8 ...208*/;
- newgdg.ng_GadgetText = NULL;
- newgdg.ng_GadgetID = FILENAM2_GDG;
- filenam2_gad = gad = CreateGadget( TEXT_KIND, gad, &newgdg,
- GTTX_Text, filename,
- GTTX_Border, TRUE,
- TAG_END );
-
- newgdg.ng_LeftEdge += gad->Width + 4;
- newgdg.ng_Width = fontw * 9 + 2;
- newgdg.ng_GadgetText = NULL;
- newgdg.ng_GadgetID = FILESIZE_GDG;
- filesize_gad = gad = CreateGadget( NUMBER_KIND, gad, &newgdg,
- GTNM_Number, filesize,
- GTNM_Border, TRUE,
- GTNM_Justification, GTJ_RIGHT,
- TAG_END );
-
- /* Quinta riga */
-
- newgdg.ng_Flags = PLACETEXT_LEFT;
- newgdg.ng_LeftEdge = WBS->WBorLeft + fontw * 6 + 18;
- newgdg.ng_TopEdge += fonth + 7;
- newgdg.ng_Width = 6 + chunkoffs_gad->LeftEdge + chunkoffs_gad->Width - newgdg.ng_LeftEdge /*fontw * 35 + 6 ...286*/;
- newgdg.ng_GadgetText = status_title;
- newgdg.ng_GadgetID = STATUS_GDG;
- status_gad = gad = CreateGadget( TEXT_KIND, gad, &newgdg,
- GTTX_Text, statname[status],
- GTTX_Border, TRUE,
- TAG_END );
-
- /* Sesta riga */
-
- newgdg.ng_Flags = PLACETEXT_IN;
- newgdg.ng_LeftEdge = WBS->WBorLeft + 2 + vlist_gad->Width / 3 - 50;
- newgdg.ng_TopEdge += fonth + 10;
- newgdg.ng_Width = 100;
- newgdg.ng_GadgetText = msg_hide;
- newgdg.ng_GadgetID = HIDE_GDG;
- hide_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
- TAG_END );
-
- newgdg.ng_LeftEdge += vlist_gad->Width / 3;
- newgdg.ng_GadgetText = msg_quit;
- newgdg.ng_GadgetID = QUIT_GDG;
- quit_gad = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
- TAG_END );
-
- /* Set up gadgets */
- if ( gad )
- {
- wwidth = (UWORD)(vlist_gad->LeftEdge + vlist_gad->Width + 4 + WBS->WBorRight);
- if ( GadToolsBase->lib_Version < 38 )
- wheight = (UWORD)(gad->TopEdge + gad->Height + 3 + WBS->WBorBottom);
- else
- wheight = (UWORD)(gad->TopEdge + gad->Height + 2 + WBS->WBorBottom);
- if ( wleft == ~0 && wtop == ~0 )
- {
- wleft = (WBS->Width - wwidth)>>1;
- wtop = (WBS->Height - wheight)>>1;
- }
- return( TRUE );
- }
-
- FreeVisualInfo( vi );
- vi = NULL;
- }
- UnlockPubScreen( NULL, WBS );
- }
- CloseLibrary( GadToolsBase );
- }
- return( FALSE );
- }
-
-
- void removeGadgets( void )
- {
- FreeGadgets( glist );
- FreeVisualInfo( vi );
- UnlockPubScreen( NULL, WBS );
- CloseLibrary( GadToolsBase );
- }
-