; ---------------------------------------------------------------------------
; flash_setup.cmm
; ---------------------------------------------------------------------------
  PMACRO.EXPLICIT

  PRIVATE &arg
  ENTRY %LINE &arg

; ---------------------------------------------------------------------------
flash_setup:
  IF "&arg"==""
  (
    GOSUB ShowDialog
  )
  ELSE
  (
    GOSUB ParseParameters &arg
  )
  ENDDO

; ---------------------------------------------------------------------------
; subroutines

ShowDialog:
(
  PRIVATE &win_name
  &win_name="Win_Flash_File_Setup"

  IF WINdow.EXIST(&win_name)
  (
    ; don't open multiple instances of this dialog
    WinTOP &win_name ; bring existing dialog to front
    RETURN
  )

  ; prepare global variables for standalone script test
  GLOBAL &file_user_flash
  IF "&file_user_flash"==""
  (
    ; set save file path if not set yet
    //PRIVATE &phd
    //&phd=OS.PresentHomeDirectory()
    //&file_user_flash="&phd\AppData\Roaming\TRACE32\user-flash.txt"

    PRIVATE &appdata
    &appdata=OS.ENV("APPDATA")
    &file_user_flash="&appdata\TRACE32\user-flash.txt"
  )

  GLOBAL &dir_base
  IF "&dir_base"==""
    &dir_base=OS.PPD()

  PRIVATE &ppf
  &ppf=OS.PPF()

  WinPOS ,,,,,, &win_name
  DIALOG
  (&+
    HEADER "FlashFile Configuration Setup"
    ICON ":chip"

    POS 1. 1. 80.
    ; *** show base directory
  TextCTRL: DYNTEXT "Base directory = &dir_base"
    ; *** show selected flashfile
  EditCTRL: EDIT "" ""

    POS 49. 4. 10.
    ; *** Button FILE - select flashfile
  FileBTN: BUTTON "[:folder]File..." "DO ""&ppf"" FILE"

    POSX 1.
    ; *** Button EDIT - edit contents of flashfile
  EditBTN: BUTTON "[:edit]Edit" "DO ""&ppf"" EDIT"

    POSX 1.
    ; *** Button OK - terminate dialog
  OkBTN: DEFBUTTON "OK" "DO ""&ppf"" OK"

    CLOSE
    (
      ; exit button X of the dialog was clicked
      DIALOG.END
    )

  )

  ; initialization
  GOSUB Load_Flash_Setup

  RETURN
)

; ---------------------------------------------------------------------------
ParseParameters:
(
  PRIVATE &param
  ENTRY %LINE &param

  IF (STRing.SCAN("&param","FILE",0)>=0)
    GOSUB File_Button_Clicked

  IF (STRing.SCAN("&param","EDIT",0)>=0)
    GOSUB Edit_Button_Clicked

  IF (STRing.SCAN("&param","OK",0)>=0)
    GOSUB Ok_Button_Clicked

  RETURN
)

; ---------------------------------------------------------------------------
File_Button_Clicked:
(
  GLOBAL &file &dir

  &file=DIALOG.STRing(EditCTRL)

  &dir=OS.FILE.PATH("&file")
  //  IF FILE.EXIST("&file")
  //  (
  //    &dir=OS_FILE_PATH("&file")
  //  )
  //  ELSE
  //  (
  //    &dir=OS_FILE_PATH("&ppf")
  //  )

  WinPOS , , , , , , , , "Select File"
  DIALOG.SetFile.SELECT EditCTRL "&dir\*.txt"

  RETURN
)

; ---------------------------------------------------------------------------
Edit_Button_Clicked:
(
  PRIVATE &file &result

  &file=DIALOG.STRing(EditCTRL)

  IF FILE.EXIST("&file")
  (
    EDIT.file "&file"
  )
  ELSE
  (
    DIALOG.YESNO "Selected FlashSetup file &file does not exist!"+CONVert.CHAR(0x0D0A)+"Create new file?"
    ENTRY &result

    IF &result==TRUE()
    (
      EDIT.file "&file"
    )
  )

  RETURN
)

; ---------------------------------------------------------------------------
Ok_Button_Clicked:
(
  PRIVATE &flashfile

  &flashfile=DIALOG.STRing(EditCTRL)

  IF FILE.EXIST("&flashfile")
  (
    ; save flash setup file
    GOSUB Store_Flash_Setup

    ; close dialog
    DIALOG.END
  )
  ELSE
  (
    PRIVATE &result

    DIALOG.YESNO "Selected FlashFile does not exist!" \
      "&flashfile" \
      "" \
      "Cancel FlashFile selection and close dialog?"
    ENTRY &result
    
    IF &result
    (
      ; close dialog
      DIALOG.END
    )
  )

  RETURN
)

; ---------------------------------------------------------------------------
Load_Flash_Setup:
(
  PRIVATE &flashfile

   ; read flash setup from save file
  GOSUB File_Read "&file_user_flash"
  RETURNVALUES &flashfile

  DIALOG.SET EditCTRL "&flashfile"

  RETURN
)

; ---------------------------------------------------------------------------
Store_Flash_Setup:
(
  PRIVATE &flashfile
  
  &flashfile=DIALOG.STRing(EditCTRL)

  ; write flash setup from save file
  GOSUB File_Write "&file_user_flash" "&flashfile"

  RETURN
)

; ---------------------------------------------------------------------------
; 
File_Read:
(
  PRIVATE &fread &inputline
  PARAMETERS &fread

  &inputline=""
  IF FILE.EXIST("&fread")
  (
    OPEN #1 "&fread" /Read
    READ #1 %LINE &inputline
    CLOSE #1
  )
  RETURN "&inputline"
)

; ---------------------------------------------------------------------------
;
File_Write:
(
  PARAMETERS &fwrite &outputline

  IF "&outputline"!=""
  (
    OPEN #2 "&fwrite" /Write /Create
    WRITE #2 "&outputline"
    CLOSE #2
  )
  RETURN
)
