CSD & A home page        Alpha 5 Script Editing Restore
Last updated June 2nd, 2006


Note: This script was the beginning code that eventually morphed into the CSDA Code Utility product.  The code below just restores the script editor, whereas the CSDA Code Utility restores all windows and other objects on your Alpha Five Desktop.  To Learn more about the CSDA Code Utility, just click here



Version History:

06/02/2006    Changed code to save current scripts on can exit
                      Stopped redundant event creation,
                      Fixed bug with no scripts opened
05/30/2006    Fixed timing of database exit event to save current scripts
05/21/2006    Improved timing a bit for restart and close of A5
05/18/2006    Last Code Editor tab is now the last script being edited (i.e. the selected code editor tab) and cursor is placed
                      in the same location before restart
05/12/2006    Add Controlpanel show in case it's not showing
05/11/2006    Added auto-creation of "___" script, eliminated need for autoexec script modification
04/16/2006    Initial version

What does this do:
Many times you are in the development process and because of some error, files opened that were not closed or something else you can not clear, you are forced to reboot Alpha 5. Unfortunately, after rebooting, you must re-open all the Scripts (and UDFs) code that you were in the process of editing.  A great amount of time is wasted in this process.  This script saves all script names, restarts A5 and opens the code window with all of the same scripts, and places your cursor back on the last position being edited

Download:
The following code saves a list of all scripts, closes A5, starts A5 again and opens up the scripts, just by running one simple script

To download the UDF in Alpha 5 script import format:  Download Scripts

If you find it useful (and anyone who develops code should find this a real time saver),
a voluntary contribution of $10 can be made to Computer Systems Design & Associates.

Installation:
To import the script import format and install it properly
  1. Go to the A5 Control Panel
  2. Select the Code tab
  3. Right-click in a blank area of the panel and select import
  4. Select the script import file "CSDA_A5_ScriptEditRestore.txt"
  5. To install the "___" script for the 1st time, go to the Interactive window and type
    ScriptEditRestore()  followed by enter
The "___" will automatically be created IF it does not exist
(Warning!!!  Any script of the same name will be overwritten, so change it 1st if this is a concern)

This newest version requires no changes to the AUTOEXEC global script.
Remove any previous code in AUTOEXEC that calls ScriptEditRestore().   It will not cause any problem if not deleted, though.

Using the scripts:
To use the code
  1. Double-click on "___" script.  This will save scripts being edited, close A5 and reopen A5, and reopen scripts for editing
  2. Close A5 (scripts will be remembered if this code has been executed).  You can activate A5 with a Windows shortcut that has a target line similar to:

    "C:\Program Files\A5V7\alpha5.exe" "C:\Program Files\A5V7\databasename.adb" -COMMAND="scripteditrestore()"

  3. To remember scripts and just close A5, you can execute ScriptEditRestore("2").  If the scripts have been previously remembered (by a previous "___" script execution), then just close A5.



'Date Created: 14-Apr-2006 10:49:54 AM
'Last Updated: 02-Jun-2006 07:56:30 PM
'Created By  : Ira J. Perlow
'Updated By  : Ira J. Perlow
FUNCTION ScriptEditRestore AS C (Flag=" " as C)
'DESCRIPTION: Restores the script editor after a restart of the database

'======================================================================
' Created by Computer Systems Design & Associates, Ira J. Perlow
' Copyright 2006 Computer Systems Design & Associates, All Rights Reserved

'    You may use this code at your own risk in whole or as a part.

'    Use in full or part is permitted with proper attributions to the
'    source, except it may not be sold as part of any software package.
'======================================================================
' Version History:
' 06/02/2006    Changed code to save current scripts on can exit
'                Stopped redundant event creation,
'                Fixed bug with no scripts opened
' 05/30/2006    Fixed timing of database exit event to save current scripts
' 05/21/2006    Improved timing a bit for restart and close of A5
' 05/18/2006    Code Editor tab being edited is now the last script restored
'                (i.e. the selected code editor tab) and cursor is placed
'                in the same location before restart
' 05/12/2006    Add Controlpanel show in case it's not showing
' 05/11/2006    Added auto-creation of "___" script, eliminated need for
'                autoexec script modification
' 04/16/2006    Initial version

'======================================================================
' Installation:
' To import the script import format and install it properly

'    1. Go to the A5 Control Panel
'    2. Select the Code tab
'    3. Right-click in a blank area of the panel and select import
'    4. Select the script import file "CSDA_A5_ScriptEditRestore.txt"
'    5. To install the "___" script for the 1st time, go to the Interactive window and type
'        ScriptEditRestore()  followed by enter

' The "___" will automatically be created IF it does not exist
' (Warning!!!  Any script of the same name will be overwritten, so change it 1st if this is a concern)

' This newest version requires no changes to the AUTOEXEC global script.
' Remove any previous code in AUTOEXEC that calls ScriptEditRestore().   It will not cause any problem if not deleted, though.

'======================================================================
' Using the scripts:
' To use the code

'    1. Double-click on "___" script.  This will save scripts being edited, close A5 and reopen A5, and reopen scripts for editing
'    2. Close A5 (scripts will be remembered if this code has been executed).  You can activate A5 with a Windows shortcut that has a target line similar to:

'        "C:\Program Files\A5V7\alpha5.exe" "C:\Program Files\A5V7\databasename.adb" -COMMAND="scripteditrestore()"

'    3. To remember scripts and just close A5, you can execute ScriptEditRestore("2").  If the scripts have been previously remembered (by a previous "___" script execution), then just close A5.
'======================================================================
' Purpose:    Saves a list of all scripts currently be edited, Closes A5,
'            then restarts with the same scripts open for edit
'            This saves a lot of time when you have to close A5
'            and restart to eliminate a problem.  This happens with open
'            files, DECLARESTRUCT, certain errors, crashes, etc.

' Input: Flag    = If not null, then saves all scripts being edited in
'                    file databasename.aed in database path
'                    If null, then restores all database files
'                    Default is blank and leaves AED file

' Output:    List of Script or UDF's being edited,
'                and file "databasename.aed" with the same text

' Errors:
   
' Typical Usage:

' Example:
'        ScriptEditRestore()            ' Restores all scripts, leaves ".aed" file
'        ScriptEditRestore("")        ' Restores all scripts, deletes ".aed" file
'        ScriptEditRestore(" ")        ' Restores all scripts, leaves ".aed" file
'        ScriptEditRestore("1")        ' Remember all scripts being edited,
'                                        close A5, restart and restore scripts
'                                        being edited
'        ScriptEditRestore("2")        ' Remember all scripts being edited
'                                         and close A5 (don't restart)
'        ScriptEditRestore("3")        ' Remember all scripts being edited


' Notes:
'    databasename.AED file contains list of current scripts being edited.

'    This script creates a script that can be just double clicked in the
'    code window that will execute to save scripts being edited and reload
'    A5 process.  It will be named "___" to make it appear at the top
'    of the code list when in alphabetical order.  It will have 1 line
'    of active code in it that looks like this

'        ScriptEditRestore("1")    ' Save script names being edited & reloads A5

'    To start A5 with a shortcut to the database (adb file) and restore
'    the previously saved script names, create a shortcut with a "Target:"
'    line similar to:

'        "C:\Program Files\A5V7\alpha5.exe" "C:\Program Files\A5V7\databasename.adb" -COMMAND="scripteditrestore()"

'    Also, if scripts are not saved, the A5 window will not close as the
'    new one starts to open, which will error out.
'    Just close the 2nd window, and then save the scripts in the 1st one.

'    If any of the scripts require a password, it will prompt you
'    without telling you which script the password is needed for.
'    Look at the bottom status bar for the name
'======================================================================

' This is the EXE that starts Alpha 5 (without a path which is
' determined automatically). If different, you must change this
A5exe="Alpha5.exe"

' Get name of file containing script list
aednam=file.filename_parse(IF(a5.Get_Master_Name()=="",A5.Get_Name(),a5.Get_Master_Name()),"DPN")+".aed"

' If flag is blank or null
IF UT(flag)==""
    ' Restore scripts being edited
    scpedit=""

    ' See if file with list of scripts being edited exists
    IF file.exists(aednam)
        ' Get list of scripts previously being edited
        scpedit=Alltrim(get_from_file(aednam))
        ' If flag is null, then delete, otherwise, leave last scripts edited file
        IF len(Flag)=0
            file.remove(aednam)
        END IF

        ' Restore if list is not empty
        IF .not.(scpedit=="")
            for i=3 to line_count(scpedit)
                scpnam=alltrim(word(word(scpedit,i,crlf()),1,"|"))
                IF RIGHT(scpnam,2)=="()"
                    scpnam=LEFT(scpnam,LEN(scpnam)-2)
                    statusbar.set_text("Opening    UDF: "+scpnam)
                    udf_design(scpnam)
                ELSE
                    statusbar.set_text("Opening Script: "+scpnam)
                    script_design(scpnam)
                END IF
            next i
            scpnam=alltrim(word(word(scpedit,2,crlf()),1,"|"))
            IF RIGHT(scpnam,2)=="()"
                scpnam=LEFT(scpnam,LEN(scpnam)-2)
                statusbar.set_text("Opening    UDF: "+scpnam)
                udf_design(scpnam)
            ELSE
                statusbar.set_text("Opening Script: "+scpnam)
                script_design(scpnam)
            END IF

            ' Restore cursor to last script opened.  If Interactive Window,
            ' then cursor will be left at 0
            ptr=obj("CODEEDITOR")
            p=a5_get_ptr_to_code_ed(ptr)
   
            ' Restore cursor
            curpos=Val(alltrim(word(word(scpedit,1,crlf()),1,"|")))
            if curpos>0
                p.Set_Cursor()
            END IF
        end if


        ' Show Control Panel in case autoexec hid it.  If form hid it
        ' we are out of luck
        ControlPanel.show()
    END IF
    statusbar.set_text("")

    ' Return list of scripts being saved
    ScriptEditRestore=scpedit
   
   
    DIM aiv as P
    aiv=addin.variables()
    DIM aiv.ScriptEditEvent as C
    ' If not set up, then install event
    IF aiv.ScriptEditEvent==""
        ' Setup to restore scripts as we go from 1 database to another
        y=on_database_init("y=ScriptEditRestore()")

        aiv.ScriptEditEvent="1"
    END IF

    ' Always set this event up as it is cleared after executing
    ' Setup to save current scripts when we leave a database
    ' Assigning ScriptEditRestore to a variable makes sure it complete
    y=can_database_exit("y=ScriptEditRestore(\"3\")")

    ' Get list of scripts
    scplist=CRLF()+:A5.SCRIPT_ENUM(2)+CRLF()

    ' IF "___" is not a script, then create it
    IF .not.((crlf()+"___"+crlf()) $ scplist)

        scpcod=<<%code%
' This is a script that can be just double clicked in the code window
' that will execute the save scripts being edited and reload A5 process.
' It is named "___" to make it appear at the top of the code list when
' in alphabetical order
ScriptEditRestore("1")
%code%
        ' save script for later use
        script_save("___",scpcod)
       
        ' Refresh control panel so new script shows up
        ControlPanel.Refresh()
    END IF


ELSE
    IF VAL(UT(flag))>=1
        ' Get list of scripts being edited
        scpedit=a5_what_being_edited()
       
        ' Check flag to see if we already set event
        DIM aiv as P
        aiv=addin.variables()
        DIM aiv.ScriptEditEvent as C
        IF aiv.ScriptEditEvent==""
            ' Setup to restore scripts as we go from 1 database to another
            y=on_database_init("y=ScriptEditRestore()")

            ' Setup to save current scripts when we leave a database
            ' Assigning ScriptEditRestore to a variable makes sure it completes
            y=can_database_exit("y=ScriptEditRestore(\"3\")")

            aiv.ScriptEditEvent="1"
        END IF

        ' If there are scripts to save, otherwise leave last one
        IF .not.(trim(scpedit)=="")
            ' Get cursor of current window and put at beginning of file
            ptr=obj("CODEEDITOR")
            p=a5_get_ptr_to_code_ed(ptr)

            error_flag=0
            on error goto error_handler
            curpos=p.get_cursor()
            on error goto 0

            IF error_flag=1
                curpos=0
            END IF
           
            scpedit=LTRIM(STR(curpos))+CRLF()+scpedit
   
            dim global ScriptEditLast as C
            IF .not.(ScriptEditLast==scpedit)
                ' Save to file in current database directory if list has changed
                yl=save_to_file(scpedit,aednam)
                ScriptEditLast=scpedit
            END IF
        END IF
    END IF
    IF VAL(UT(flag))=1
        ScriptEditRestore=""

        ' Compute command line to restart A5
        cmdline=chr(34)+:A5.GET_EXE_PATH()+chr(92)+A5exe+chr(34)+" "\
        +chr(34)+IF(a5.Get_Master_Name()=="",A5.Get_Name(),a5.Get_Master_Name())+chr(34)\
        +" -COMMAND=\"scripteditrestore()\""

        ' Start command line shell. 
        ' This may be timing sensitive and may start before the A5.close()
        ' causing Alpha to think that 2 copies are running of same database
        SYS_SHELL(cmdline)

        ' Close A5
        a5.close()
        EXIT FUNCTION
    ELSE IF VAL(UT(flag))=2
        ' Close A5
        a5.close()
        EXIT FUNCTION
    END IF
END IF

EXIT FUNCTION
'============================
error_handler:
error_flag=1
resume NEXT
EXIT FUNCTION

END FUNCTION


End-of Text