Index: win_installer/src/Array.nsh =================================================================== diff -u --- win_installer/src/Array.nsh (revision 0) +++ win_installer/src/Array.nsh (revision c5ff44d0bed4d2a4cf72debb1dcb1bcfdfd3f8fa) @@ -0,0 +1,418 @@ + + ############################################################################################### + ## Array.nsh + ## NSIS Array & script header + ## + ## Writted by Afrow UK (Stuart Welch) + ## Last modified: 6th September 2005 + ############################################################################################### + + ## See Array.txt for usage information. + ## Please don't modify this file! + + ## Current Array methods: + ## Array, Set, Get, Shift, Unshift, Push, Pop, Put, Slice, Delete, Reverse, Copy, Init, Clear, + ## ValExists + + !ifndef ArrayIncluded + !define ArrayIncluded + + !ifndef ArrayNoTemp1 + Var Array_Temp1 + !endif + !ifndef ArrayNoTemp2 + Var Array_Temp2 + !endif + !ifndef ArrayNoTemp3 + Var Array_Temp3 + !endif + !ifndef ArrayNoTemp4 + Var Array_Temp4 + !endif + + ############################################################################################### + ## Array: Creates an Array object + ############################################################################################### + !macro Array Array + !ifndef "${Array}-Used" + !define "${Array}-Used" + + !define "${Array}-Store" "$PLUGINSDIR\${Array}.tmp" + !define "${Array}-Section" "0" + + !ifdef Array-NoErrors + !define "${Array}-NoErrors" + !undef Array-NoErrors + !endif + + Var "${Array}_UBound" + + !define "${Array}->Set" '!insertmacro "Array-Set" "${Array}"' + !define "${Array}->Get" '!insertmacro "Array-Get" "${Array}"' + !define "${Array}->Shift" '!insertmacro "Array-Shift" "${Array}"' + !define "${Array}->Unshift" '!insertmacro "Array-Unshift" "${Array}"' + !define "${Array}->Push" '!insertmacro "Array-Push" "${Array}"' + !define "${Array}->Pop" '!insertmacro "Array-Pop" "${Array}"' + !define "${Array}->Put" '!insertmacro "Array-Put" "${Array}"' + !define "${Array}->Slice" '!insertmacro "Array-Slice" "${Array}"' + !define "${Array}->Delete" '!insertmacro "Array-Delete" "${Array}"' + !define "${Array}->Reverse" '!insertmacro "Array-Reverse" "${Array}"' + !define "${Array}->Copy" '!insertmacro "Array-Copy" "${Array}"' + !define "${Array}->Exists" '!insertmacro "Array-Exists" "${Array}"' + !define "${Array}->Clear" '!insertmacro "Array-Clear" "${Array}"' + !define "${Array}->Init" '!insertmacro "Array-Init" "${Array}"' + !define "${Array}->Destroy" '!insertmacro "Array-Destroy" "${Array}"' + + !else + !error "Array: ${Array} has already been declared once!" + !endif + !macroend + !define Array "!insertmacro Array" + !define ArrayNoErrors "!define Array-NoErrors" + + ############################################################################################### + ## Array-CheckForError: Internal macro used for error message + ############################################################################################### + !macro Array-CheckForError ArrayUBound Index + IntCmp "${ArrayUBound}" "${Index}" +3 0 +3 + MessageBox MB_OK|MB_ICONSTOP "Index: ${Index} is out of range in Array: Array" + Abort + !macroend + + ############################################################################################### + ## Array-Set: Sets value at Array Index + ############################################################################################### + !macro "Array-Set" Array Index Value + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + !ifndef "${Array}-NoErrors" + !insertmacro Array-CheckForError "$${Array}_UBound" "${Index}" + !endif + WriteINIStr "${${Array}-Store}" "${${Array}-Section}" "${Index}" "${Value}" + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Set" "!insertmacro Array-Set" + + ############################################################################################### + ## Array-Get: Gets value at Array Index + ############################################################################################### + !macro "Array-Get" Array Index Var + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + !ifndef "${Array}-NoErrors" + !insertmacro Array-CheckForError "$${Array}_UBound" "${Index}" + !endif + ReadINIStr "${Var}" "${${Array}-Store}" "${${Array}-Section}" "${Index}" + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Get" "!insertmacro Array-Get" + + ############################################################################################### + ## Array-Push: Puts element at front of array + ############################################################################################### + !macro "Array-Push" Array Value + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + StrCpy $Array_Temp2 "$${Array}_UBound" + IntCmp $Array_Temp2 -1 +6 +6 + ReadINIStr "$Array_Temp1" "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp2" + IntOp $Array_Temp3 $Array_Temp2 + 1 + WriteINIStr "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp3" "$Array_Temp1" + IntOp $Array_Temp2 $Array_Temp2 - 1 + Goto -5 + WriteINIStr "${${Array}-Store}" "${${Array}-Section}" "0" "${Value}" + IntOp "$${Array}_UBound" "$${Array}_UBound" + 1 + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Push" "!insertmacro Array-Push" + + ############################################################################################### + ## Array-Pop: Takes element from front of Array + ############################################################################################### + !macro "Array-Pop" Array Var + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + ReadINIStr "${Var}" "${${Array}-Store}" "${${Array}-Section}" "0" + StrCpy $Array_Temp2 1 + ReadINIStr "$Array_Temp1" "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp2" + IntOp $Array_Temp3 $Array_Temp2 - 1 + WriteINIStr "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp3" "$Array_Temp1" + StrCmp $Array_Temp2 "$${Array}_UBound" +3 + IntOp $Array_Temp2 $Array_Temp2 + 1 + Goto -5 + DeleteINIStr "${${Array}-Store}" "${${Array}-Section}" "$${Array}_UBound" + IntOp "$${Array}_UBound" "$${Array}_UBound" - 1 + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Pop" "!insertmacro Array-Pop" + + ############################################################################################### + ## Array-Put: Puts element at Index in Array + ############################################################################################### + !macro "Array-Put" Array Index Value + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + !ifndef "${Array}-NoErrors" + !insertmacro Array-CheckForError "$${Array}_UBound" "${Index}" + !endif + StrCpy $Array_Temp2 "$${Array}_UBound" + ReadINIStr "$Array_Temp1" "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp2" + IntOp $Array_Temp3 $Array_Temp2 + 1 + WriteINIStr "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp3" "$Array_Temp1" + IntOp $Array_Temp2 $Array_Temp2 - 1 + IntCmp $Array_Temp2 "${Index}" -4 0 -4 + WriteINIStr "${${Array}-Store}" "${${Array}-Section}" "${Index}" "${Value}" + IntOp "$${Array}_UBound" "$${Array}_UBound" + 1 + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Put" "!insertmacro Array-Put" + + ############################################################################################### + ## Array-Slice: Cuts element from Array + ############################################################################################### + !macro "Array-Slice" Array Index Var + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + !ifndef "${Array}-NoErrors" + !insertmacro Array-CheckForError "$${Array}_UBound" "${Index}" + !endif + ReadINIStr "${Var}" "${${Array}-Store}" "${${Array}-Section}" "${Index}" + StrCpy $Array_Temp2 ${Index} + IntOp $Array_Temp2 $Array_Temp2 + 1 + ReadINIStr "$Array_Temp1" "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp2" + IntOp $Array_Temp3 $Array_Temp2 - 1 + WriteINIStr "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp3" "$Array_Temp1" + StrCmp $Array_Temp2 "$${Array}_UBound" -4 + DeleteINIStr "${${Array}-Store}" "${${Array}-Section}" "$${Array}_UBound" + IntOp "$${Array}_UBound" "$${Array}_UBound" - 1 + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Slice" "!insertmacro Array-Slice" + + ############################################################################################### + ## Array-Delete: Deletes element in Array + ############################################################################################### + !macro "Array-Delete" Array Index + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + !ifndef "${Array}-NoErrors" + !insertmacro Array-CheckForError "$${Array}_UBound" "${Index}" + !endif + StrCpy $Array_Temp2 ${Index} + IntOp $Array_Temp2 $Array_Temp2 + 1 + ReadINIStr "$Array_Temp1" "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp2" + IntOp $Array_Temp3 $Array_Temp2 - 1 + WriteINIStr "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp3" "$Array_Temp1" + IntCmp $Array_Temp2 "$${Array}_UBound" -4 + DeleteINIStr "${${Array}-Store}" "${${Array}-Section}" "$${Array}_UBound" + IntOp "$${Array}_UBound" "$${Array}_UBound" - 1 + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Delete" "!insertmacro Array-Delete" + + ############################################################################################### + ## Array-Reverse: Reverses elements in Array + ############################################################################################### + !macro "Array-Reverse" Array + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + IntCmp "$${Array}_UBound" 0 +10 +10 + StrCpy $Array_Temp2 "$${Array}_UBound" + StrCpy $Array_Temp4 "0" + ReadINIStr "$Array_Temp1" "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp2" + ReadINIStr "$Array_Temp3" "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp4" + WriteINIStr "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp2" "$Array_Temp3" + WriteINIStr "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp4" "$Array_Temp1" + IntOp $Array_Temp2 $Array_Temp2 - 1 + IntOp $Array_Temp4 $Array_Temp4 + 1 + IntCmp $Array_Temp2 $Array_Temp4 0 0 -6 + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Reverse" "!insertmacro Array-Reverse" + + ############################################################################################### + ## Array-Shift: Puts element on the end of Array + ############################################################################################### + !macro "Array-Shift" Array Value + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + IntOp "$${Array}_UBound" "$${Array}_UBound" + 1 + WriteINIStr "${${Array}-Store}" "${${Array}-Section}" "$${Array}_UBound" "${Value}" + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Shift" "!insertmacro Array-Shift" + + ############################################################################################### + ## Array-Unshift: Removes element from end of Array + ############################################################################################### + !macro "Array-Unshift" Array Var + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + ReadINIStr "${Var}" "${${Array}-Store}" "${${Array}-Section}" "$${Array}_UBound" + DeleteINIStr "${${Array}-Store}" "${${Array}-Section}" "$${Array}_UBound" + IntOp "$${Array}_UBound" "$${Array}_UBound" - 1 + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Unshift" "!insertmacro Array-Unshift" + + ############################################################################################### + ## Array-Copy: Copies one Array to another + ############################################################################################### + !macro Array-Copy Array ToArray Mode + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + !ifdef "${ToArray}-Used" + !ifdef "${ToArray}-Inited" + !define "Mode-${Mode}" + StrCpy $Array_Temp1 "-1" + !ifdef "Mode-w" + StrCpy $Array_Temp2 "-1" + StrCpy "$${ToArray}_UBound" "$${Array}_UBound" + !else + StrCpy $Array_Temp2 "$${ToArray}_UBound" + StrCmp "$${ToArray}_UBound" -1 0 +2 + StrCpy "$${ToArray}_UBound" 0 + IntOp "$${ToArray}_UBound" "$${Array}_UBound" + "$${ToArray}_UBound" + !endif + IntOp $Array_Temp1 $Array_Temp1 + 1 + IntOp $Array_Temp2 $Array_Temp2 + 1 + ReadINIStr "$Array_Temp3" "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp1" + WriteINIStr "${${ToArray}-Store}" "${${ToArray}-Section}" "$Array_Temp2" "$Array_Temp3" + StrCmp $Array_Temp1 "$${Array}_UBound" 0 -4 + !else + !error "Array: ${ToArray} not initialised!" + !endif + !else + !error "Array: ${ToArray} not declared!" + !endif + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Copy" "!insertmacro Array-Copy" + + ############################################################################################### + ## Array-Exists: Checks if Array element exists + ############################################################################################### + !macro Array-Exists Array Value TrueGo FalseGo + !ifdef "${Array}-Used" + !ifdef "${Array}-Inited" + StrCpy $Array_Temp1 0 + ReadINIStr "$Array_Temp2" "${${Array}-Store}" "${${Array}-Section}" "$Array_Temp1" + StrCmp $Array_Temp2 "${Value}" "${TrueGo}" + IntOp $Array_Temp1 $Array_Temp1 + 1 + StrCmp $Array_Temp1 "$${Array}_UBound" "${FalseGo}" -3 + !else + !error "Array: ${Array} not initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Exists" "!insertmacro Array-Exists" + + ############################################################################################### + ## Array-Clear: Clears Array elements + ############################################################################################### + !macro Array-Clear Array + !ifdef "${Array}-Used" + StrCpy "$${Array}_UBound" -1 + DeleteINISec "${${Array}-Store}" "${${Array-Section}" + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Clear" "!insertmacro Array-Clear" + + ############################################################################################### + ## Array-Init: Initialises Array for use + ############################################################################################### + !macro Array-Init Array + !ifdef "${Array}-Used" + !ifndef "${Array}-Inited" + !define "${Array}-Inited" + StrCpy "$${Array}_UBound" -1 + !else + !error "Array: ${Array} already initialised!" + !endif + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Init" "!insertmacro Array-Init" + + ############################################################################################### + ## Array-Destroy: Deletes Array object + ############################################################################################### + !macro Array-Destroy Array + !ifdef "${Array}-Used" + StrCpy "$${Array}_UBound" -1 + SetDetailsPrint none + FlushINI "${${Array}-Store}" + Delete "${${Array}-Store}" + SetDetailsPrint both + !undef "${Array}-Store" + !undef "${Array}-Section" + !undef "${Array}-Used" + !else + !error "Array: ${Array} not declared!" + !endif + !macroend + !define "Array-Destroy" "!insertmacro Array-Destroy" + + !endif # ArrayIncluded + + # eof \ No newline at end of file Index: win_installer/src/Array.nsi =================================================================== diff -u --- win_installer/src/Array.nsi (revision 0) +++ win_installer/src/Array.nsi (revision c5ff44d0bed4d2a4cf72debb1dcb1bcfdfd3f8fa) @@ -0,0 +1,91 @@ +## Example for NSIS Array script header +## by Afrow UK + +## Include Array & LogicLib script header +!include Array.nsh +!include LogicLib.nsh + +## General settings +OutFile ArrayTest.exe +Name Arraytest +Caption ArrayTest +ShowInstDetails show + +## Array creation +${Array} myArray1 +${Array} myArray2 + +Section + +## Initialise both arrays before we use them! +${myArray1->Init} +${myArray2->Init} + +## Develop myArray1 +${myArray1->Shift} "1. Hello there!" +${myArray1->Shift} "2. This took a while" +${myArray1->Shift} "3. To let you know!" +${myArray1->Shift} "4. This is a cool example..." +${myArray1->Shift} "5. Hope it helps." +${myArray1->Shift} "6. Or not." +${myArray1->Push} "0. This was Pushed on front (took a bit of time!)" + +## Print contents of myArray1 +DetailPrint "=========================" +DetailPrint " Array: myArray1" +DetailPrint "" + +Push $R0 # Save value of $R0 in case we need it later +Push $R1 # & $R1 + StrCpy $R0 "$myArray1_UBound" + +${Do} + ${myArray1->Get} $R0 $R1 + DetailPrint "$R0 is: $R1" + IntOp $R0 $R0 - 1 +${LoopUntil} $R0 < 0 + +Pop $R1 # Value of $R1 is back! +Pop $R0 # & $R0 + +## Copy myArray1 into myArray2 +${myArray1->Copy} myArray2 1 + +## Do stuff with myArray2 +## Comment/uncomment and see what happens!!! + #${myArray2->Put} 3 "Put @ 3: Gay bear!" + ${myArray2->Reverse} + #${myArray2->Shift} "It got reversed!" + #${myArray2->Delete} 5 + +## Print contents of myArray2 +DetailPrint "" +DetailPrint "=========================" +DetailPrint " Array: myArray2" +DetailPrint "" + +Push $R0 # Save value of $R0 in case we need it later +Push $R1 # & $R1 + StrCpy $R0 "$myArray2_UBound" + +${Do} + ${myArray2->Get} $R0 $R1 + DetailPrint "$R0 is: $R1" + IntOp $R0 $R0 - 1 +${LoopUntil} $R0 < 0 + +## Pop and Unshift +DetailPrint "" +${myArray2->Pop} $R0 +DetailPrint "Popped: $R0" +${myArray2->Unshift} $R0 +DetailPrint "Unshifted: $R0" + +Pop $R1 # Value of $R1 is back! +Pop $R0 # & $R0 + +## Don't need Arrays anymore. Lets DESTROY them! +${myArray2->Destroy} +${myArray1->Destroy} + +SectionEnd \ No newline at end of file Index: win_installer/src/language-pack.nsi =================================================================== diff -u -r4ed7dd10c5ec340ad46553f2fa1ad065c6dbd39a -rc5ff44d0bed4d2a4cf72debb1dcb1bcfdfd3f8fa --- win_installer/src/language-pack.nsi (.../language-pack.nsi) (revision 4ed7dd10c5ec340ad46553f2fa1ad065c6dbd39a) +++ win_installer/src/language-pack.nsi (.../language-pack.nsi) (revision c5ff44d0bed4d2a4cf72debb1dcb1bcfdfd3f8fa) @@ -161,12 +161,17 @@ Var VERSION_INT Var FLASHXML_DIR Var SQL_QUERY +Var FOLDER_FLAG +${Array} RF_FOLDERS +${Array} CS_FOLDERS +${Array} FS_FOLDERS ;-------------------------------- Section "LAMS Language Pack ${VERSION}" LanguagePack # write this language pack version to registry - WriteRegStr HKLM "${REG_HEAD}" "language_pack" $VERSION_INT + ###############UNCOMMENT BELOW LINE BEFORE DEPLOY + #WriteRegStr HKLM "${REG_HEAD}" "language_pack" $VERSION_INT Detailprint 'Writing Language pack version ${VERSION} to registry: "${REG_HEAD}"' setoutpath $EXEDIR @@ -407,44 +412,80 @@ detailprint "DONE!" FunctionEnd -${Array} FOLDERS ; first, finds the location of the language files in the database ; then copy the required files to the dirname Function copyllid + + ${CS_FOLDERS->Init} + ${FS_FOLDERS->Init} + ${RF_FOLDERS->Init} + + setoutpath "$INSTDIR\temp\sqlscripts" - File /a "*.sql" - #strcpy $SQL_QUERY '"SELECT concat($\'@$\',learning_library_id,$\'@$\') FROM lams_learning_library WHERE title = $\'Chat and Scribe$\';"' - #strcpy $SQL_QUERY '"$MYSQL_DIRbin\mysql.exe" -u"$DB_USER" -p"$DB_PASS" -s -i -B $DB_NAME -e $SQL_QUERY' strcpy $SQL_QUERY '"SELECT learning_library_id FROM lams_learning_library WHERE title = $\'Chat and Scribe$\';"' strcpy $SQL_QUERY '"$MYSQL_DIRbin\mysql.exe" -u"$DB_USER" -p"$DB_PASS" -s -i -B $DB_NAME -e $SQL_QUERY' + strcpy $FOLDER_FLAG "0" call executeSQLScript pop $0 detailprint "SQL script result for Chat and Scribe: $\n$0" strcpy $SQL_QUERY '"SELECT learning_library_id FROM lams_learning_library WHERE title = $\'Forum and Scribe$\';"' strcpy $SQL_QUERY '"$MYSQL_DIRbin\mysql.exe" -u"$DB_USER" -p"$DB_PASS" -s -i -B $DB_NAME -e $SQL_QUERY' + strcpy $FOLDER_FLAG "1" call executeSQLScript pop $0 detailprint "SQL script result for Forum and Scribe: $\n$0" strcpy $SQL_QUERY '"SELECT learning_library_id FROM lams_learning_library WHERE title = $\'Resources and Forum$\';"' strcpy $SQL_QUERY '"$MYSQL_DIRbin\mysql.exe" -u"$DB_USER" -p"$DB_PASS" -s -i -B $DB_NAME -e $SQL_QUERY' + strcpy $FOLDER_FLAG "2" call executeSQLScript pop $0 detailprint "SQL script result for Resource and Forum: $\n$0" + + IntOp $R0 "$myArray_UBound" + 1 + ${while} $RO != 0 + ${FS_FOLDERS->Pop} $R1 + MessageBox MB_OK|MB_ICONEXCLAMATION "Forum and Scribe: $R1 $\nElements $R0" + IntOp $R0 "$myArray_UBound" + 1 + ${endwhile} + + FunctionEnd + + ; Executing sql scripts ; Puts the result of sql script on the stack Function executeSQLScript - nsExec::ExecToStack $SQL_QUERY detailprint $SQL_QUERY - pop $0 pop $1 + ; Getting the muliple entries out + ${while} $1 != "" + push "$\n" + push $1 + call SplitFirstStrPart + pop $R0 + pop $1 + + ${if} $FOLDER_FLAG == "0" + ${CS_FOLDERS->Push} $RO + #MessageBox MB_OK|MB_ICONEXCLAMATION "Chat and scribe: $R0 $\n" + ${endif} + ${if} $FOLDER_FLAG == "1" + ${FS_FOLDERS->Push} $RO + #MessageBox MB_OK|MB_ICONEXCLAMATION "Forum and Scribe: $R0" + ${endif} + ${if} $FOLDER_FLAG == "2" + ${RF_FOLDERS->Push} $RO + #MessageBox MB_OK|MB_ICONEXCLAMATION "Resource and Forum: $R0" + ${endif} + ${endwhile} + strcpy $1 $1 -2 push $1 @@ -461,3 +502,37 @@ clearerrors FunctionEnd + +Function SplitFirstStrPart + Exch $R0 + Exch + Exch $R1 + Push $R2 + Push $R3 + StrCpy $R3 $R1 + StrLen $R1 $R0 + IntOp $R1 $R1 + 1 + loop: + IntOp $R1 $R1 - 1 + StrCpy $R2 $R0 1 -$R1 + StrCmp $R1 0 exit0 + StrCmp $R2 $R3 exit1 loop + exit0: + StrCpy $R1 "" + Goto exit2 + exit1: + IntOp $R1 $R1 - 1 + StrCmp $R1 0 0 +3 + StrCpy $R2 "" + Goto +2 + StrCpy $R2 $R0 "" -$R1 + IntOp $R1 $R1 + 1 + StrCpy $R0 $R0 -$R1 + StrCpy $R1 $R2 + exit2: + Pop $R3 + Pop $R2 + Exch $R1 ;rest + Exch + Exch $R0 ;first +FunctionEnd