static char *VSID_BrowseFile(char *select_text, char *pattern) { struct FileRequester *request; request = (struct FileRequester *)AllocAslRequestTags(ASL_FileRequest, ASL_Hail, select_text, (struct TagItem *)TAG_DONE); if (AslRequestTags(request, ASLFR_Window, vsid_window, ASLFR_InitialDrawer, "PROGDIR:", ASLFR_InitialPattern, pattern, ASLFR_PositiveText, select_text, (struct TagItem *)TAG_DONE)) { fname[0] = 0; strcat(fname,request->rf_Dir); if (fname[strlen(fname) - 1] != (UBYTE)58) { strcat(fname, "/"); } strcat(fname, request->rf_File); if (fname[strlen(fname) - 1] != (UBYTE)58 && fname[strlen(fname) - 1] != '/') { if (request) { FreeAslRequest(request); } return fname; } } if (request) { FreeAslRequest(request); } return NULL; }
__autoexit void amiga_exit (void) { int i; for (i = 0; i < HISTORY_LINES; i++) { if (*(History + i)) FreeVec (*(History + i)); *(History + i) = 0; } if (GameReq) FreeAslRequest (GameReq); if (SaveReq) FreeAslRequest (SaveReq); if (ScriptReq) FreeAslRequest (ScriptReq); if (Menus) FreeMenus (Menus); if (Visual) FreeVisualInfo (Visual); if (ThisProcess) ThisProcess->pr_WindowPtr = OldWindowPtr; if (Window) CloseWindow (Window); if (Screen) CloseScreen (Screen); if (Font) CloseFont (Font); if (DefaultPubScreen) UnlockPubScreen (0, DefaultPubScreen); if (Icon) FreeDiskObject (Icon); }
void __asm __saveds intAHIsub_FreeAudio( register __a2 struct AHIAudioCtrlDrv *AudioCtrl ) { if(AudioCtrl->ahiac_DriverData) { FreeAslRequest(dd->fs_FileReq); FreeAslRequest(dd->fs_RecFileReq); FreeSignal(dd->fs_MasterSignal); FreeSignal(dd->fs_RecMasterSignal); FreeVec(AudioCtrl->ahiac_DriverData); AudioCtrl->ahiac_DriverData = NULL; } }
/*** JanoPrefs wants some additionnal information ***/ ULONG change_screen_mode(WORD *whd, ULONG ModeID) #endif { struct ScreenModeRequester *smr; if((smr = (void *) AllocAslRequestTags(ASL_ScreenModeRequest, ASLSM_DoWidth, FALSE, ASLSM_DoHeight, FALSE, ASLSM_DoAutoScroll, FALSE, ASLSM_DoOverscanType, FALSE, ASLSM_DoDepth, TRUE, ASLSM_InitialDisplayID, ModeID, ASLFR_Screen, (ULONG)Scr, TAG_DONE) )) { if( AslRequest(smr,NULL) ) { /* Extract some interresting information about screen */ #ifndef JANOPREF *Depth = smr->sm_DisplayDepth; #else whd[0] = smr->sm_DisplayWidth; whd[1] = smr->sm_DisplayHeight; whd[2] = smr->sm_DisplayDepth; #endif ModeID = smr->sm_DisplayID; } else ModeID = INVALID_ID; FreeAslRequest(smr); return ModeID; } return INVALID_ID; }
/*** Ask for a new font, fixed or not ***/ struct TextFont *change_fonts(struct TextAttr *buf, void *Wnd, BOOL fixed) { struct FontRequester *fr; struct TextFont *newfont = NULL; if((fr = (void *) AllocAslRequestTags(ASL_FontRequest, ASLFO_FixedWidthOnly, fixed, ASLFO_SleepWindow, TRUE, ASLFO_InitialName, (ULONG)buf->ta_Name, ASLFO_InitialSize, buf->ta_YSize, ASLFO_Window, (ULONG)Wnd, TAG_DONE))) { if( AslRequest(fr, NULL) ) { /* User may hit cancel! */ newfont = (void *) OpenDiskFont( &fr->fo_Attr ); if( newfont ) { CopyMem(&fr->fo_Attr, buf, sizeof(*buf)); /* The ta_Name field will be freed with FreeAslRequest call ! */ buf->ta_Name = newfont->tf_Message.mn_Node.ln_Name; } else ThrowError(Wnd, ErrMsg(ERR_LOADFONT)); } FreeAslRequest(fr); /* Window will be reinitiated later... */ } return newfont; }
void _AHIsub_FreeAudio( struct AHIAudioCtrlDrv *AudioCtrl, struct DriverBase* AHIsubBase ) { struct FilesaveBase* FilesaveBase = (struct FilesaveBase*) AHIsubBase; if(AudioCtrl->ahiac_DriverData) { FreeAslRequest(dd->fs_FileReq); FreeAslRequest(dd->fs_RecFileReq); FreeSignal(dd->fs_MasterSignal); FreeSignal(dd->fs_RecMasterSignal); FreeVec(AudioCtrl->ahiac_DriverData); AudioCtrl->ahiac_DriverData = NULL; } }
void shut_filerequester( struct machine *oric ) { if( req ) FreeAslRequest( req ); #ifdef __amigaos4__ if( IAsl ) DropInterface( (struct Interface *)IAsl ); #endif if( AslBase ) CloseLibrary( AslBase ); }
long ScreenMode(void) { if((AslBase = OpenLibrary("asl.library", 0)) != NULL) { struct ScreenModeRequester *sm; if((sm = AllocAslRequest(ASL_ScreenModeRequest,NULL))) { #ifdef DEBUG Printf("sm %08lx\n", sm); #endif if(AslRequestTags(sm, ASLSM_DoDepth, TRUE, ASLSM_DoWidth, TRUE, ASLSM_DoHeight, TRUE, ASLSM_MinDepth, 8, ASLSM_MaxDepth, 32, ASLSM_MinWidth, 640, ASLSM_MinHeight,480, ASLSM_MaxWidth, 1920, ASLSM_MaxHeight,1080, TAG_DONE)) { sprintf(cvar, "%d", sm->sm_DisplayWidth); set(obj->STR_width, MUIA_String_Contents, cvar); sprintf(cvar, "%d", sm->sm_DisplayHeight); set(obj->STR_height, MUIA_String_Contents, cvar); sprintf(cvar, "%d", sm->sm_DisplayDepth); set(obj->STR_depth, MUIA_String_Contents, cvar); int depth = sm->sm_DisplayDepth; if (depth == 8) set(obj->CH_fullscreen, MUIA_Selected, TRUE); else if ((depth > 8) && (depth < 16)) set(obj->STR_depth, MUIA_String_Contents, "16"); else if (depth> 16) set(obj->STR_depth, MUIA_String_Contents, "32"); } FreeAslRequest(sm); } if (AslBase) CloseLibrary(AslBase); } return 0; }
STRPTR AslFile( STRPTR TitleText, STRPTR InitialPattern ) { struct Library * AslBase; STRPTR name = NULL; ENTER(); if((AslBase = OpenLibrary("asl.library", 0))) { struct FileRequester *freq; if((freq = AllocAslRequestTags(ASL_FileRequest, TAG_DONE))) { if(AslRequestTags(freq, ASLFR_TitleText, (ULONG)TitleText, ASLFR_InitialDrawer, (ULONG)GetString(AslFilePath,"PROGDIR:"), ASLFR_RejectIcons, TRUE, InitialPattern != NULL ? ASLFR_DoPatterns:TAG_IGNORE, TRUE, InitialPattern != NULL ? ASLFR_InitialPattern:TAG_IGNORE, (ULONG)InitialPattern, TAG_DONE)) { ULONG namelen; namelen = strlen(freq->fr_File) + strlen(freq->fr_Drawer) + 32; if((name = AllocVec(namelen + 1, MEMF_PUBLIC | MEMF_CLEAR))) { AddPart(name, freq->fr_Drawer, namelen); AddPart(name, freq->fr_File, namelen); set( AslFilePath, MUIA_String_Contents,(ULONG)freq->fr_Drawer); } } FreeAslRequest(freq); } else ShowError("Cannot alloc AslRequest!"); CloseLibrary( AslBase ); } else ShowError("Cannot open %s","asl.library"); DBG_STRING(name); return name; }
// Solicit a font short request_font( struct Window *parent, char *title, char *buffer, short *size, ULONG flags, unsigned short font_pen_count, unsigned char *font_pen_table, short *fpen, short *bpen) { struct IBox coords; struct FontRequester *fontreq; short ret; // Get current requester coordinates GetSemaphore(&GUI->req_lock,SEMF_SHARED,0); coords=GUI->req_coords; FreeSemaphore(&GUI->req_lock); // Allocate fontrequester if (!(fontreq=AllocAslRequestTags(ASL_FontRequest, ASLFO_Window,parent, ASLFO_TitleText,title, ASLFO_InitialName,buffer, ASLFO_InitialSize,*size, ASLFO_Flags,flags|FOF_PRIVATEIDCMP, ASLFO_InitialLeftEdge,coords.Left, ASLFO_InitialTopEdge,coords.Top, ASLFO_InitialWidth,coords.Width, ASLFO_InitialHeight,coords.Height, ASLFO_MaxFrontPen,font_pen_count, ASLFO_MaxBackPen,font_pen_count, ASLFO_FrontPens,font_pen_table, ASLFO_BackPens,font_pen_table, ASLFO_InitialFrontPen,(fpen)?*fpen:0, ASLFO_InitialBackPen,(bpen)?*bpen:0, TAG_END))) { return 0; } // Display requester ret=AslRequest(fontreq,0); // Success? if (ret) { // Store new font strcpy(buffer,fontreq->fo_Attr.ta_Name); *size=fontreq->fo_Attr.ta_YSize; // Store colours if (fpen) *fpen=map_font_colour(fontreq->fo_FrontPen); if (bpen) *bpen=map_font_colour(fontreq->fo_BackPen); } // Save coordinates GetSemaphore(&GUI->req_lock,SEMF_EXCLUSIVE,0); GUI->req_coords=*((struct IBox *)&fontreq->fo_LeftEdge); FreeSemaphore(&GUI->req_lock); // Free font requester FreeAslRequest(fontreq); return ret; }
// Solicit a file request_file( struct Window *parent, char *title, char *buffer, char *def, ULONG flags, char *pattern) { struct IBox coords; struct FileRequester *filereq; char *path,*file=0; int ret; // Allocate path if (!(path=AllocVec(300,MEMF_CLEAR))) return 0; // Get current path if (buffer[0]) strcpy(path,buffer); else if (def) strcpy(path,def); if (path[0]) { file=FilePart(path); if (file && file>path) { strcpy(path+256,file); *file=0; file=path+256; } } // Get current requester coordinates GetSemaphore(&GUI->req_lock,SEMF_SHARED,0); coords=GUI->req_coords; FreeSemaphore(&GUI->req_lock); // Allocate filerequester if (!(filereq=AllocAslRequestTags(ASL_FileRequest, (flags&(1<<30))?ASLFR_Screen:ASLFR_Window,parent, ASLFR_TitleText,title, (file)?ASLFR_InitialFile:TAG_IGNORE,file, (*path)?ASLFR_InitialDrawer:TAG_IGNORE,path, ASLFR_Flags1,(flags|FRF_PRIVATEIDCMP)&~((1<<31)|(1<<30)|(1<<29)), ASLFR_Flags2,(flags&(1<<31))?0:FRF_REJECTICONS, ASLFR_InitialLeftEdge,coords.Left, ASLFR_InitialTopEdge,coords.Top, ASLFR_InitialWidth,coords.Width, ASLFR_InitialHeight,coords.Height, (flags&(1<<29))?ASLFR_InitialPattern:TAG_IGNORE,pattern, TAG_END))) { FreeVec(path); return 0; } // Display requester ret=AslRequest(filereq,0); // Build path strcpy(buffer,filereq->fr_Drawer); AddPart(buffer,filereq->fr_File,256); if (!*buffer || !*filereq->fr_File) ret=0; // Save coordinates GetSemaphore(&GUI->req_lock,SEMF_EXCLUSIVE,0); GUI->req_coords=*((struct IBox *)&filereq->fr_LeftEdge); FreeSemaphore(&GUI->req_lock); // Free file requester FreeAslRequest(filereq); FreeVec(path); return ret; }
static void do_file_dialog (unsigned int type) { struct FileRequester *FileRequest; struct Window *win; char buf[80]; char path[512]; const char *req_prompt; const char *req_pattern = 0; const char *req_lastdir; int req_do_save = FALSE; #ifdef __amigaos4__ int release_asl = 0; #endif if (type >= FILEDIALOG_MAX) return; if (!AslBase) { AslBase = OpenLibrary ("asl.library", 36); if (!AslBase) { write_log ("Can't open asl.library v36.\n"); return; } else { #ifdef __amigaos4__ IAsl = (struct AslIFace *) GetInterface ((struct Library *)AslBase, "main", 1, NULL); if (!IAsl) { CloseLibrary (AslBase); AslBase = 0; write_log ("Can't get asl.library interface\n"); } #endif } #ifdef __amigaos4__ } else { IAsl->Obtain (); release_asl = 1; #endif } FileRequest = AllocAslRequest (ASL_FileRequest, NULL); if (!FileRequest) { write_log ("Unable to allocate file requester.\n"); return; } /* Find this task's default window */ win = ((struct Process *) FindTask (NULL))->pr_WindowPtr; if (win == (struct Window *)-1) win = 0; /* * Prepare requester. */ switch (type) { default: /* to stop GCC complaining */ case FILEDIALOG_INSERT_DF0: case FILEDIALOG_INSERT_DF1: case FILEDIALOG_INSERT_DF2: case FILEDIALOG_INSERT_DF3: sprintf (buf, "Select image to insert in drive DF%d:", FILEDIALOG_DRIVE(type)); req_prompt = buf; req_pattern = "(#?.(ad(f|z)|dms|ipf|zip)#?|df?|?)"; req_lastdir = get_last_floppy_dir (); break; case FILEDIALOG_SAVE_STATE: req_prompt = "Select file to save emulator state to"; req_pattern = "#?.uss"; req_lastdir = get_last_savestate_dir (); req_do_save = TRUE; break; case FILEDIALOG_LOAD_STATE: req_prompt = "Select saved state file to load"; req_pattern = "#?.uss"; req_lastdir = get_last_savestate_dir (); break; } /* * Do the file request. */ if (AslRequestTags (FileRequest, ASLFR_TitleText, req_prompt, ASLFR_InitialDrawer, req_lastdir, ASLFR_InitialPattern, req_pattern, ASLFR_DoPatterns, req_pattern != 0, ASLFR_DoSaveMode, req_do_save, ASLFR_RejectIcons, TRUE, ASLFR_Window, win, TAG_DONE)) { /* * User selected a file. * * Construct file path to selected image. */ strcpy (path, FileRequest->fr_Drawer); if (strlen (path) && !(path[strlen (path) - 1] == ':' || path[strlen (path) - 1] == '/')) strcat (path, "/"); strcat (path, FileRequest->fr_File); /* * Process selected file. */ switch (type) { default: /* to stop GCC complaining */ case FILEDIALOG_INSERT_DF0: case FILEDIALOG_INSERT_DF1: case FILEDIALOG_INSERT_DF2: case FILEDIALOG_INSERT_DF3: set_last_savestate_dir (FileRequest->fr_Drawer); strcpy (changed_prefs.df[FILEDIALOG_DRIVE(type)], path); break; case FILEDIALOG_SAVE_STATE: set_last_savestate_dir (FileRequest->fr_Drawer); savestate_initsave (path, 1, 0); save_state (path, "Description"); break; case FILEDIALOG_LOAD_STATE: set_last_savestate_dir (FileRequest->fr_Drawer); savestate_initsave (path, 1, 0); savestate_state = STATE_DORESTORE; write_log ("Restoring state from '%s'...\n", path); break; } } FreeAslRequest (FileRequest); #ifdef __amigaos4__ if (release_asl) IAsl->Release (); #endif return; }
main(int argc, char *argv[]) { unsigned char str[256]; int i; int j; struct RastPort rp; unsigned char *pp; struct BitMap bm = { 256, /* bytes per row */ 8, /* rows */ 0, /* flags */ 1, /* depth */ 0, /* pad */ 0 /* planes */ }; struct TextAttr ta; struct TextFont *tf; struct FontRequester *fr; struct TagItem frtags[] = { ASL_Hail, (ULONG)"NetBSD font choices", ASL_Width, 640, ASL_Height, 400, ASL_LeftEdge, 10, ASL_TopEdge, 10, ASL_OKText, (ULONG)"Dump", ASL_CancelText, (ULONG)"Cancel", ASL_FontName, (ULONG)"topaz.font", ASL_FontHeight, 8L, ASL_FontStyles, FS_NORMAL, ASL_FuncFlags, FONF_STYLES | FONF_FIXEDWIDTH, TAG_DONE }; /* Let the user pick a font to dump */ if (fr = (struct FontRequester *) AllocAslRequest(ASL_FontRequest, frtags)) { if (!AslRequest(fr, NULL)) { FreeAslRequest(fr); fprintf(stderr, "User requested exit\n"); exit (0); } ta.ta_Name = (STRPTR)malloc(strlen(fr->fo_Attr.ta_Name)); strcpy(ta.ta_Name, fr->fo_Attr.ta_Name); ta.ta_YSize = fr->fo_Attr.ta_YSize; ta.ta_Style = fr->fo_Attr.ta_Style; ta.ta_Flags = fr->fo_Attr.ta_Flags; FreeAslRequest(fr); } else { fprintf(stderr, "Can't allocate Font Requestor\n"); exit (1); } /* Open the selected font */ tf = (struct TextFont *)OpenDiskFont (&ta); if (! tf) { fprintf (stderr, "Can't open font: %s\n", ta.ta_Name); exit (1); } #ifdef DEBUG fprintf(stderr, "Information on selected font:\n"); fprintf(stderr, "Name=%s\n", ta.ta_Name); fprintf(stderr, "Height=%d tf_Style=%x tf_Flags=%x Width=%d Baseline=%d\n", tf->tf_YSize, tf->tf_Style, tf->tf_Flags, tf->tf_XSize, tf->tf_Baseline); #endif /* Check for NetBSD restrictions */ if (tf->tf_Flags & FPF_PROPORTIONAL) { fprintf(stderr, "NetBSD does not support proportional fonts\n"); exit (1); } if (tf->tf_XSize > NetBSDwidth) { fprintf(stderr, "NetBSD does not support fonts wider than %d pixels\n", NetBSDwidth); exit (1); } /* Allocate area to render font in */ InitBitMap(&bm, 1, 256 * NetBSDwidth, tf->tf_YSize); InitRastPort (&rp); rp.BitMap = &bm; bm.Planes[0] = pp = AllocRaster (256 * NetBSDwidth, tf->tf_YSize); if (!pp) { fprintf (stderr, "Can't allocate raster!\n"); exit (1); } /* Initialize string to be rendered */ for (i = 32; i < 256; i++) { str[i - 32] = i; } /* Render string with selected font */ SetFont (&rp, tf); SetSoftStyle(&rp, ta.ta_Style ^ tf->tf_Style, FSF_BOLD | FSF_UNDERLINED | FSF_ITALIC); Move (&rp, 0, tf->tf_Baseline); ClearEOL(&rp); if (tf->tf_XSize != NetBSDwidth) { /* right-justify char in cell */ Move (&rp, NetBSDwidth - tf->tf_XSize, tf->tf_Baseline); /* Narrow font, put each character in space of normal font */ for (i = 0; i < (256 - 32); i++) { Text (&rp, &str[i], 1); Move (&rp, rp.cp_x + (NetBSDwidth - tf->tf_XSize), rp.cp_y); } } else { Text (&rp, str, 256 - 32); } /* Dump them.. */ printf ("/* Generated automatically by fontdumper.c. *DONT* distribute\n"); printf (" this file, it may contain information Copyright by Commodore!\n"); printf ("\n"); printf (" Font: %s/%d\n", ta.ta_Name, tf->tf_YSize); printf (" */\n\n"); printf ("unsigned char kernel_font_width = %d;\n", tf->tf_XSize); printf ("unsigned char kernel_font_height = %d;\n", tf->tf_YSize); printf ("unsigned char kernel_font_baseline = %d;\n", tf->tf_Baseline); printf ("short kernel_font_boldsmear = %d;\n", tf->tf_BoldSmear); printf ("unsigned char kernel_font_lo = 32;\n"); printf ("unsigned char kernel_font_hi = 255;\n\n"); printf ("unsigned char kernel_cursor[] = {\n"); for (j = 0; j < (tf->tf_YSize -1); j++) { printf ("0xff, "); } printf ("0xff };\n\n"); printf ("unsigned char kernel_font[] = {\n"); for (i = 0; i < 256 - 32; i++) { printf ("/* %c */", i + 32); for (j = 0; j < tf->tf_YSize; j++) { printf (" 0x%02x,", pp[i+j*256]); } printf ("\n"); } printf ("};\n"); CloseFont (tf); FreeRaster (pp, 256 * NetBSDwidth, tf->tf_YSize); return (0); }
void ami_file_req_free(void) { FreeAslRequest(filereq); FreeAslRequest(savereq); }