! ! Subroutine: SAVEGrid ! ! subroutine SaveGrid !*************************************************************************** !* * !* THIS SUBROUTINE CREATES A DIALOG BOX THAT ALLOWS THE USER TO save THE * !* CHAOS DATA FILE. THIS ROUTINE USES THE SYSTEM COMMON DIALOG ACCESSES * !* THROUGH THE WINDOWS API'S * !* * !*************************************************************************** use dflib use dfwin use global implicit none TYPE (T_OPENFILENAME) iofn logical(4) iret integer(4) ierror integer(4) iunit integer(4) dot_place, last_letter_place, last_place, j_look character(26*7) allfilters character(60) dlgtitle character(1) c1 character(4) c4 logical(4) checked ! ! update status bar ! call setstatusbar(0, 'SaveGrid'C) call setstatusbar(1,' 'C) ! !* SET UP FILE SEARCH FILTER ALLFILTERS = 'Finite Element Grid files (*.feg)' // char(0) // '*.FEG' // char(0) // char(0) ! Dialogue Title DLGTITLE = 'Save Grid File'C !* SET UP STRUCTURE USED BY COMMON DIALOGS - SEE WIN32 API HELP FOR EXPLANATION iofn%LSTRUCTSIZE = (BIT_SIZE(iofn%LSTRUCTSIZE) + & BIT_SIZE(iofn%HWNDOWNER) + & BIT_SIZE(iofn%HINSTANCE) + & BIT_SIZE(iofn%LPSTRFILTER) + & BIT_SIZE(iofn%LPSTRCUSTOMFILTER) + & BIT_SIZE(iofn%NMAXCUSTFILTER) + & BIT_SIZE(iofn%NFILTERINDEX) + & BIT_SIZE(iofn%LPSTRFILE) + & BIT_SIZE(iofn%NMAXFILE) + & BIT_SIZE(iofn%LPSTRFILETITLE) + & BIT_SIZE(iofn%NMAXFILETITLE) + & BIT_SIZE(iofn%LPSTRINITIALDIR) + & BIT_SIZE(iofn%LPSTRTITLE) + & BIT_SIZE(iofn%FLAGS) + & BIT_SIZE(iofn%NFILEOFFSET) + & BIT_SIZE(iofn%NFILEEXTENSION) + & BIT_SIZE(iofn%LPSTRDEFEXT) + & BIT_SIZE(iofn%LCUSTDATA) + & BIT_SIZE(iofn%LPFNHOOK) + & BIT_SIZE(iofn%LPTEMPLATENAME))/8 iofn%HWNDOWNER = NULL iofn%HINSTANCE = NULL iofn%LPSTRFILTER = LOC(ALLFILTERS) iofn%LPSTRCUSTOMFILTER = NULL iofn%NMAXCUSTFILTER = NULL iofn%NFILTERINDEX = 1 ! convert feg_sav back to C convention (null-terminated): feg_sav = TRIM(feg_sav) // CHAR(0) iofn%LPSTRFILE = LOC(FEG_SAV) iofn%NMAXFILE = LEN(FEG_SAV) iofn%LPSTRFILETITLE = NULL iofn%NMAXFILETITLE = NULL iofn%LPSTRINITIALDIR = NULL iofn%LPSTRTITLE = LOC(DLGTITLE) iofn%FLAGS = NULL iofn%NFILEOFFSET = NULL iofn%NFILEEXTENSION = NULL iofn%LPSTRDEFEXT = NULL iofn%LCUSTDATA = NULL iofn%LPFNHOOK = NULL iofn%LPTEMPLATENAME = NULL IF (GRIDLOADED) THEN !* CREATE & RUN DIALOG iret = GETSAVEFILENAME(iofn) ! Note main side-effect: character-string feg_sav has new value, ! but this value is according to C conventions! CALL Repair_String(feg_sav) CALL COMDLGER(ierror) !* SAVE FILE IF THE "OK" BUTTON HAS BEEN PRESSED IF(iret .AND. (ierror == 0))THEN ! ! correct output file name "feg_sav" if suffix ".feg" is missing last_letter_place = LEN_TRIM(feg_sav) ! which should work, after CALL Repair_String dot_place = MAX(1, last_letter_place - 3) c4 = feg_sav(dot_place:last_letter_place) if (.NOT.((c4 == ".feg").OR.(c4 == ".FEG"))) then feg_sav = feg_sav(1:last_letter_place) // ".feg" end if ! CALL output_grid CALL AutoSave('BACKUP.FEG') ! modify window title iunit = getactiveqq() iret = SetWindowText(GetHwndQQ(iunit),TRIM(feg_sav) // CHAR(0)) END IF ELSE CALL ERROR4 END IF ! update statusbar infor. call setstatusbar(0,'Running'C) call setstatusbar(1,' 'C) RETURN END SUBROUTINE SaveGrid