void alert_user( short type, short resource_number, short error_number, short identifier) { char buffer[50]; psprintf(buffer, "%d", identifier); ParamText((StringPtr)getpstr(temporary, resource_number, error_number), (StringPtr)buffer, (StringPtr)"", (StringPtr)""); switch(type) { case fatalError: Alert(alrtFATAL_ERROR, (ModalFilterUPP) NULL); ParamText((StringPtr)"", (StringPtr)"", (StringPtr)"", (StringPtr)""); exit(-1); case infoError: Alert(alrtNONFATAL_ERROR, (ModalFilterUPP) NULL); break; default: halt(); } ParamText((StringPtr)"", (StringPtr)"", (StringPtr)"", (StringPtr)""); return; }
int dprintf( const char *format, ...) { char buffer[257]; /* [length byte] + [255 string bytes] + [null] */ va_list arglist; int return_value; if (debug_status) { va_start(arglist, format); return_value= vsprintf(buffer+1, format, arglist); va_end(arglist); *buffer= strlen(buffer+1); #ifdef DEBUG if (debugger_installed) { DebugStr((StringPtr)buffer); } else #endif { ParamText((StringPtr)buffer, (StringPtr)"\p?", (StringPtr)"", (StringPtr)""); Alert(alrtNONFATAL_ERROR, (ModalFilterUPP) NULL); ParamText((StringPtr)"", (StringPtr)"", (StringPtr)"", (StringPtr)""); } } else {
Boolean itworked(short errcode) /* Return TRUE if it worked, do an error message and return false if it didn't. Error strings for native C errors are in STR#1999, Mac errs in STR 2000-errcode, e.g 2108 for not enough memory */ { if (errcode != 0) { short itemHit; Str255 errdesc; StringHandle strh; errdesc[0] = '\0'; if (errcode > 0) GetIndString(errdesc,stdIOErrID,errcode); /* STDIO file rres, etc */ else { strh = GetString(2000-errcode); if (strh != (StringHandle) nil) { memcpy(errdesc,*strh,256); ReleaseResource((Handle)strh); } } if (errdesc[0] == '\0') { /* No description found, just give the number */ sprintf((char *)&errdesc[1],"a %d error occurred",errcode); errdesc[0] = strlen((char*)&errdesc[1]); } SetCursor(&qd.arrow); ParamText(errdesc,(StringPtr)"",gActivities[gTopactivity],(StringPtr)""); itemHit = Alert(errAlertID, (ModalFilterUPP)nil); } return(errcode==0); }
// Parse a single resource bool XML_ResourceFork::ParseResource(ResType Type, short ID) { ResourceHandle = Get1Resource(Type,ID); if (ResourceHandle == NULL) { return false; } HLock(ResourceHandle); if (!DoParse()) { const char *Name = SourceName ? SourceName : "[]"; #ifdef TARGET_API_MAC_CARBON csprintf( temporary, "There were configuration-file parsing errors in resource %hd of object %s", ID,Name); SimpleAlert(kAlertStopAlert,temporary); #else psprintf( ptemporary, "There were configuration-file parsing errors in resource %hd of object %s", ID,Name); ParamText(ptemporary,0,0,0); Alert(FatalErrorAlert,NULL); #endif ExitToShell(); } HUnlock(ResourceHandle); ReleaseResource(ResourceHandle); return true; }
short get_level_number_from_user( void) { short index, item_hit, level_number, maximum_level_number; DialogPtr dialog; struct entry_point entry; boolean done= FALSE; index = 0; maximum_level_number= 0; while (get_indexed_entry_point(&entry, &index, _single_player_entry_point | _multiplayer_carnage_entry_point | _multiplayer_cooperative_entry_point)) maximum_level_number++; dialog = myGetNewDialog(dlogLEVEL_NUMBER, NULL, (WindowPtr) -1, 0); assert(dialog); psprintf(temporary, "%d", maximum_level_number); ParamText((StringPtr)temporary, (StringPtr)"", (StringPtr)"", (StringPtr)""); SelIText(dialog, iLEVEL_NUMBER, 0, SHORT_MAX); while(!done) { do { ModalDialog(get_general_filter_upp(), &item_hit); } while (item_hit>iCANCEL); level_number= extract_number_from_text_item(dialog, iLEVEL_NUMBER); switch(item_hit) { case iOK: if(level_number<=0 || level_number>maximum_level_number) { SelIText(dialog, iLEVEL_NUMBER, 0, SHORT_MAX); SysBeep(-1); } else { level_number-= 1; /* Make it zero based */ done= TRUE; } break; case iCANCEL: done= TRUE; level_number= NONE; break; default: halt(); break; } } DisposeDialog(dialog); return level_number; }
void modalfatalbox(char *fmt, ...) { va_list ap; Str255 stuff; va_start(ap, fmt); /* We'd like stuff to be a Pascal string */ stuff[0] = vsprintf((char *)(&stuff[1]), fmt, ap); va_end(ap); ParamText(stuff, NULL, NULL, NULL); StopAlert(128, NULL); cleanup_exit(1); }
void showerror(char * errdesc, const char * errcomment) { short itemHit; Str255 paserr, pascomment; SetCursor(&qd.arrow); if (errcomment == nil) errcomment = ""; C2P (errcomment, pascomment); C2P (errdesc, paserr); ParamText(paserr,pascomment,gActivities[gTopactivity],(StringPtr)""); itemHit = Alert(errAlertID, (ModalFilterUPP)nil); }
void error(const char *format,...) { Str255 buf; va_list ap; va_start(ap, format); vsprintf((char *)buf, format, ap); va_end(ap); C2P((char *)buf, buf); ParamText(buf, (StringPtr)"", (StringPtr)"", (StringPtr)""); Alert(128, (ModalFilterUPP) NULL); ExitToShell(); }
// Reports an interpretation error void XML_ResourceFork::ReportInterpretError(const char *ErrorString) { #ifdef TARGET_API_MAC_CARBON if (GetNumInterpretErrors() < MaxErrorsToShow) { SimpleAlert(kAlertNoteAlert,ErrorString); } #else CopyCStringToPascal(ErrorString, ptemporary); ParamText(ptemporary,0,0,0); if (GetNumInterpretErrors() < MaxErrorsToShow) { Alert(NonFatalErrorAlert,NULL); } #endif }
void QTTarg_ShowStringToUser (StringPtr theString) { short mySavedResFile; // get the current resource file and set the application's resource file mySavedResFile = CurResFile(); UseResFile(gAppResFile); ParamText(theString, NULL, NULL, NULL); Alert(kQTTargAlertID, NULL); // restore the original resource file UseResFile(mySavedResFile); }
// Reports a read error void XML_ResourceFork::ReportReadError() { const char *Name = SourceName ? SourceName : "[]"; #ifdef TARGET_API_MAC_CARBON csprintf(temporary, "Error in reading resource fork of object %s",Name); SimpleAlert(kAlertStopAlert,temporary); #else psprintf(ptemporary, "Error in reading resource fork of object %s",Name); ParamText(ptemporary,0,0,0); Alert(FatalErrorAlert,NULL); #endif ExitToShell(); }
// UNDONE: eventually rip this & and it's resource from the MPW mktyplib build VOID MacMessageBox ( CHAR * szOutput ) { BYTE szBufTmp[256]; // convert to pascal-style string *szBufTmp = (BYTE)(min(strlen(szOutput), 255)); strncpy(szBufTmp+1, szOutput, *szBufTmp); // put up the alert ParamText((ConstStr255Param)szBufTmp, "", "", ""); Alert(128, NULL); }
void paramtext(char* p0,char* p1,char* p2,char* p3) { char localStr0[256] = ""; char localStr1[256] = ""; char localStr2[256] = ""; char localStr3[256] = ""; if(p0) {strncpy(localStr0,p0,255);localStr0[255] = 0;} if(p1) {strncpy(localStr1,p1,255);localStr1[255] = 0;} if(p2) {strncpy(localStr2,p2,255);localStr2[255] = 0;} if(p3) {strncpy(localStr3,p3,255);localStr3[255] = 0;} // now call the mac param text my_c2pstr(localStr0); my_c2pstr(localStr1); my_c2pstr(localStr2); my_c2pstr(localStr3); ParamText((StringPtr)localStr0,(StringPtr)localStr1,(StringPtr)localStr2,(StringPtr)localStr3); }
// Reports an XML parsing error void XML_ResourceFork::ReportParseError(const char *ErrorString, int LineNumber) { const char *Name = SourceName ? SourceName : "[]"; #ifdef TARGET_API_MAC_CARBON csprintf(temporary, "XML parsing error: %s at line %d in object %s",ErrorString, LineNumber, Name); SimpleAlert(kAlertStopAlert,temporary); #else psprintf(ptemporary,"XML parsing error: %s at line %d in object %s", ErrorString,LineNumber, Name); ParamText(ptemporary,0,0,0); Alert(FatalErrorAlert,NULL); #endif ExitToShell(); }
boolean getyesno(char default_answer) { extern FILE *logfile; short alertid,i,large,err; char dfault[8], ndfault[8]; ProcessSerialNumber psn; if (batchmode) return(default_answer == 'y' ? TRUE : FALSE); if (strlen(Yes_No_Message)<72) large=0; else large=100; strcpy(dfault,default_answer == 'y' ? LANG("y") : LANG("n")); strcpy(ndfault,default_answer == 'n' ? LANG("y") : LANG("n")); for(i=0;i<strlen(Yes_No_Message);i++) if (Yes_No_Message[i]<' ' && Yes_No_Message[i]>=0) Yes_No_Message[i]=' '; /* It's a signed char! */ InitCursor(); alertid=(default_answer == 'n' ? 211+large : 212+large); c2pstr(Yes_No_Message); ParamText((uchar *)Yes_No_Message,(uchar *)"", \ (uchar *)"",(uchar *)""); if (AEProcessing) { if (gHasProcessManager) GetFrontProcess(&psn); if(MyInteractWithUser()) return default_answer; if (gHasProcessManager) SetFrontProcess(&psn); } if (CautionAlert(alertid,nil)==1){ p2cstr((uchar *)Yes_No_Message); fputs(strcat(Yes_No_Message,dfault),stderr); fputc('\n',stderr); fflush(stderr); return(default_answer == 'y' ? TRUE : FALSE); } p2cstr((uchar *)Yes_No_Message); fputs(strcat(Yes_No_Message,ndfault),stderr); fputc('\n',stderr); fflush(stderr); return(default_answer == 'n' ? TRUE : FALSE); }
/* ================ Sys_Error ================ */ void Sys_Error( const char *error, ... ) { va_list argptr; char string[1024]; char string2[1024]; Sys_Shutdown(); va_start (argptr,error); vsprintf (string2+1,error,argptr); va_end (argptr); string2[0] = strlen( string2 + 1 ); strcpy( string+1, "Quake 3 Error:" ); string[0] = strlen( string + 1 ); // set the dialog box strings ParamText( (unsigned char *)string, (unsigned char *)string2, (unsigned char *)string2, (unsigned char *)string2 ); // run a dialog StopAlert( 128, NULL ); exit(0); }
// LR 1.66 -- complete rewrite (basically) of this entire routine...it was UGLY! OSStatus HandleMenu( long mSelect, short modifiers ) { short menuID = HiWord( mSelect ); short menuItem = LoWord( mSelect ); short colorResID; WindowRef frontWindow; DialogPtr dlgRef = NULL; EditWindowPtr dWin = NULL; Str255 currentWindowName, newFrontWindowName; // NS: v1.6.6, for window menu WindowRef currentWindow; // NS: this too // Predetermine what type of window we have to work with frontWindow = FrontNonFloatingWindow(); if( frontWindow ) { DialogPtr dlg = GetDialogFromWindow( frontWindow ); if( kHexEditWindowTag == GetWindowKind( frontWindow ) ) dWin = (EditWindowPtr) GetWRefCon( frontWindow ); else if( g.gotoDlg == dlg || g.searchDlg == dlg ) dlgRef = dlg; } switch( menuID ) { case kAppleMenu: if( menuItem == AM_About ) HexEditAboutBox(); #if !TARGET_API_MAC_CARBON else { GrafPtr savePort; Str255 name; GetPort( &savePort ); GetMenuItemText( appleMenu, menuItem, name ); OpenDeskAcc( name ); SetPort( savePort ); } #endif break; case kFileMenu: switch( menuItem ) { case FM_New: gPrefs.overwrite = false; //LR 190 -- overwrite mode makes no sense in a new document NewEditWindow(); break; case FM_Open: AskEditWindow( kWindowNormal ); break; // HR/LR 050328 - Handle FM_Disassemble menu item case FM_Disassemble: g.disassemble = !g.disassemble; if ( g.disassemble ) { dWin->drawMode = DM_Disassembly; dWin->bytesPerLine = kDisBytesPerLine; dWin->hexStart = kDisHexStart; dWin->asciiStart = kDisASCIIStart; } else { dWin->drawMode = DM_Dump; dWin->bytesPerLine = kHexBytesPerLine; dWin->hexStart = kHexHexStart; dWin->asciiStart = kHexASCIIStart; } /* Make sure the editOffset position starts on a new line */ dWin->editOffset -= dWin->editOffset % dWin->bytesPerLine; UpdateEditWindows(); break; case FM_OtherFork: // LR: I want to see both! if( dWin ) { short fork; //LR 180 EditWindowPtr ewin; if( dWin->fork == FT_Data ) fork = FT_Resource; else fork = FT_Data; /*LR 180 -- OpenEditWindow checks for this if( NULL != (ewin = LocateEditWindow( &dWin->fsSpec, fork )) ) // LR: 1.7 - boolean typecast causes failure! { SelectWindow( ewin->oWin.theWin ); // just select existing theWin } else // try to open other fork in new theWin! */ { g.forkMode = fork; OpenEditWindow( &dWin->fsSpec, kWindowNormal, true ); } } break; case FM_CompareFiles: //LR 180 -- now pass in modifiers to allow select override if( GetCompareFiles( modifiers ) ) DoComparison(); break; //LR: 1.66 - NOTE: dWin == NULL == frontWindow! case FM_Save: if( dWin && dWin->oWin.Save ) dWin->oWin.Save( frontWindow ); break; case FM_SaveAs: if( dWin && dWin->oWin.SaveAs ) dWin->oWin.SaveAs( frontWindow ); break; case FM_Revert: if( dWin && dWin->oWin.Revert ) //LR 1.72 -- check before reverting (could be dangerous!) { ParamText( dWin->fsSpec.name, NULL, NULL, NULL ); switch( CautionAlert( alertRevert, NULL ) ) { case ok: dWin->oWin.Revert( frontWindow ); break; } } break; case FM_Close: if( dWin ) CloseEditWindow( frontWindow ); else if( dlgRef ) { HideWindow( frontWindow ); //LR: 1.7 -- no need.GetDialogWindow( dlgRef ) ); } break; case FM_Quit: if( CloseAllEditWindows() ) g.quitFlag = true; break; case FM_PageSetup: #if TARGET_API_MAC_CARBON // sel - carbon session based printing _doPageSetupDialog(&g.pageFormat); #else PrOpen(); PrStlDialog( g.HPrint ); PrClose(); #endif break; case FM_Print: if( dWin ) PrintWindow( dWin ); break; } break; case kEditMenu: #if !TARGET_API_MAC_CARBON if( !SystemEdit( menuItem -1 ) ) #endif { if( dWin ) switch( menuItem ) { case EM_Undo: UndoOperation(); break; case EM_Cut: CutSelection( dWin ); break; case EM_Copy: CopySelection( dWin ); break; case EM_Paste: PasteSelection( dWin ); break; case EM_Clear: ClearSelection( dWin ); break; case EM_SelectAll: dWin->startSel = 0; dWin->endSel = dWin->fileSize; UpdateOnscreen( dWin->oWin.theWin ); break; } else if( dlgRef ) switch( menuItem ) { case EM_Cut: DialogCut( dlgRef ); TEToScrap(); break; case EM_Copy: DialogCopy( dlgRef ); TEToScrap(); break; case EM_Paste: TEFromScrap(); DialogPaste( dlgRef ); break; case EM_Clear: DialogDelete( dlgRef ); break; case EM_SelectAll: break; } } break; case kFindMenu: switch ( menuItem ) { case SM_Find: openfind: OpenSearchDialog(); break; case SM_FindForward: gPrefs.searchForward = true; PerformTextSearch( dWin, kSearchUpdateUI ); //LR 190 -- if dWin is NULL will operate on first edit window, if any (allows search in find dialog) break; case SM_FindBackward: gPrefs.searchForward = false; PerformTextSearch( dWin, kSearchUpdateUI ); //LR 190 -- if dWin is NULL will operate on first edit window break; case SM_Replace: //LR 190 -- add replace & find next (must have a window with selection to start!) if( !dWin ) dWin = FindFirstEditWindow(); // allow this to work in find dialog, etc. if( dWin && dWin->startSel != dWin->endSel ) { EditChunk **replaceChunk; if( !g.searchBuffer[0] ) // if nothing to find open dialog goto openfind; replaceChunk = NewChunk( g.replaceText[0], 0, 0, CT_Unwritten ); if( replaceChunk ) { // Copy replacement text to chunk buffer BlockMoveData( g.replaceText+1, *(*replaceChunk)->data, g.replaceText[0] ); // Do the replacement (with undo) g.replaceAll = false; RememberOperation( dWin, EO_Paste, &gUndo ); PasteOperation( dWin, replaceChunk ); // We're done with the chunk now DisposeChunk( NULL, replaceChunk ); } // Then try to find the next occurance (in LAST direction searched!) and display it if( !PerformTextSearch( dWin, kSearchUpdateUI ) ) ScrollToSelection( dWin, dWin->startSel, true ); } break; case SM_GotoAddress: OpenGotoAddress(); break; } break; case kOptionsMenu: switch ( menuItem ) { case OM_HiAscii: gPrefs.asciiMode = !gPrefs.asciiMode; if( gPrefs.asciiMode ) g.highChar = 0xFF; else g.highChar = 0x7F; UpdateEditWindows(); break; case OM_DecimalAddr: gPrefs.decimalAddr = !gPrefs.decimalAddr; UpdateEditWindows(); break; case OM_Backups: gPrefs.backupFlag = !gPrefs.backupFlag; break; case OM_WinSize: gPrefs.constrainSize = !gPrefs.constrainSize; break; case OM_Overwrite: gPrefs.overwrite = !gPrefs.overwrite; break; case OM_NonDestructive: gPrefs.nonDestructive = !gPrefs.nonDestructive; break; case OM_MoveOnlyPaging: gPrefs.moveOnlyPaging = !gPrefs.moveOnlyPaging; break; case OM_Unformatted: gPrefs.formatCopies = !gPrefs.formatCopies; break; case OM_VertBars: gPrefs.vertBars = !gPrefs.vertBars; UpdateEditWindows(); break; case OM_ComparePref: // LR: compare options ComparisonPreferences(); break; case OM_OpenOnLaunch: gPrefs.dialogAtLaunch = !gPrefs.dialogAtLaunch; //LR -- 192 break; } break; // LR: Add color scheme menu case kColorMenu: colorResID = GetColorMenuResID( menuItem ); if( menuItem == CM_UseColor ) { gPrefs.useColor = !gPrefs.useColor; // toggle color usage } else if( dWin && dWin->csResID > 0 ) // can't color B&W windows! { if( _cmCheckedItem ) CheckMenuItem( colorMenu, _cmCheckedItem, false ); if( (modifiers & optionKey) ) // option down == change all windows (set default color) { EditWindowPtr eWin = FindFirstEditWindow(); while( eWin ) { if( GetWindowKind( eWin->oWin.theWin ) == kHexEditWindowTag ) { eWin->csResID = colorResID; eWin->csMenuID = menuItem; //LR 181 -- for menu tagging } eWin = FindNextEditWindow( eWin ); } goto savepref; } else //LR 181 -- default is (back) to changing color of a single window! { if( GetWindowKind( dWin->oWin.theWin ) == kHexEditWindowTag ) { dWin->csResID = colorResID; dWin->csMenuID = menuItem; //LR 181 -- for menu tagging } } } else { savepref: //LR 190 -- no window open == set preferred color gPrefs.csResID = colorResID; //LR 180 -- save prefs when changing all gPrefs.csMenuID = menuItem; } UpdateEditWindows(); break; // LR : 1.7 - rewrite with bug checking (could crash accessing NULL window) case kWindowMenu: GetMenuItemText( windowMenu, menuItem, newFrontWindowName ); currentWindow = FrontNonFloatingWindow(); while( currentWindow ) { GetWTitle( currentWindow, currentWindowName ); if( EqualPStrings( currentWindowName, newFrontWindowName ) ) { SelectWindow( currentWindow ); break; } currentWindow = GetNextWindow( currentWindow ); } break; } HiliteMenu( 0 ); AdjustMenus(); return( noErr ); }