home *** CD-ROM | disk | FTP | other *** search
- /* expander for SourceLink32 */
- /* creation 15.3.93 by Thomas Korfhage ++49 6446 2931 */
- /* history start 'his 1. steps in rexx' */
- /* expander uses file FORMS.LST in sourcelink macro directory */
- 'S_CLEAR_MACRO_OUTPUT'
- 'S_GET_CURR_EDITMODE Emode'
- if Emode = 'READONLY' then do
- 'S_MSG' 'File is readonly!,,Change to edit?,'RESULT
- if RESULT = 'CANCEL' then
- exit
- 'S_CHG_EDITMODE'
- end
- 'S_GET_ENV_INFO SLINK2 Slink2Path'
- FormFile = Slink2Path || "\MACROS\FORMS.LST"
- 'S_DOES_FILE_EXIST' FormFile 'FileExists'
- if FileExists = 'FALSE' then do
- 'S_MSG File for Forms not exist,FormFile,,RESULT'
- exit
- end
- 'S_GET_CURR_FILENAME' ActFileName
- if ARG(1,'E')then do
- ARG TransOrForm
- if Wordpos( TransOrForm, 'TRANS FORM WFORM') \= 0 then do
- 'S_DISABLE_WINDOW'
- Signal Value TransOrForm
- end
- end
- 'S_MSG' 'Invalid Argument (TRANS | FORM),' TransOrForm ',,'RESULT
- exit
-
- TRANS:
- 'S_GET_SELECTED_SIZE' CurrentSelLen
- LeadText = ''
- TermText = ''
- if CurrentSelLen > 0 then do
- 'S_GET_SELECTED_TEXT' OldText
- 'S_DEL_SELECTED'
- end
- else do
- 'S_GET_CURR_WORD' OldText
- 'S_DEL_WORD'
- if Length(OldText) >= 1 then do
- PrevText = OldText
- OldText = Strip(OldText,,'(')
- OldText = Strip(OldText,,'[')
- OldText = Strip(OldText,,')')
- OldText = Strip(OldText,,']')
- OldText = Strip(OldText,,',')
- OldText = Strip(OldText,,';')
- PPos = Pos(OldText,PrevText)
- LeadText = Substr(PrevText,1,PPos-1)
- TermText = Substr(PrevText,PPos+Length(OldText))
- end
- else do
- 'S_ENABLE_WINDOW'
- exit
- end
- end
- TransSearch = '~#~' || OldText || ':'
- call GetReplacement TransSearch
- 'S_INSERT_STRING' LeadText||RESULT||TermText
- do Length(TermText)
- 'S_PREV_CHAR'
- end
- 'S_ENABLE_WINDOW'
- exit
-
- FORM:
- /* query form name */
- ptext = 'Name of form to insert,'
- 'S_PROMPT' ptext FormId
- if FormId = 'CANCEL' then do
- 'S_ENABLE_WINDOW'
- exit
- end
- WFORM:
- /* get possible replacements */
- 'S_GET_CURR_WORD' CurrentWord
- if TransOrForm = 'WFORM' then do
- FormId = CurrentWord
- 'S_DEL_WORD'
- end
- 'S_GET_SELECTED_SIZE' CurrentSelLen
- if CurrentSelLen > 0 then do
- 'S_GET_SELECTED_TEXT' CurrentSelected
- 'S_COPY_SEL_TO_PASTE'
- end
- else
- CurrentSelected = ''
- 'S_GET_COL_NUM' CurrentColNo
- 'S_GET_LINE_NUM' CurrentLinNo
- 'S_SELECT_LINE'
- 'S_GET_SELECTED_TEXT' CurrentLine
- CurrentLine = Left(CurrentLine,Length(CurrentLine)-2)
- CurrentEOL = Substr(CurrentLine, CurrentColNo)
- /* restore */
- 'S_GOTO_LINE' CurrentLinNo
- /* Get legth of last Line */
- LastLineLen = 0
- do 10
- 'S_GET_CURSOR_POS CursorPos'
- if CursorPos < 1 then
- leave
- 'S_BEG_OF_LINE'
- 'S_PREV_LINE'
- 'S_GET_LINE_LEN LastLineLen'
- if LastLineLen > 4 then
- leave
- end
- if LastLineLen <= 4 then
- LastLineLen = 80 ;
- /* restore */
- 'S_GOTO_COL' CurrentColNo
- 'S_GOTO_LINE' CurrentLinNo
- /* look for form in Formfile */
- 'S_GET_FILE_BUFFNUM' FormFile 'ActBuffNo'
- if RC = 0 then do
- 'S_GOTO_BUFF' ActBuffNo
- end
- else
- 'S_OPEN_SL_FILE 0 R N' FormFile
- SearchString = '#~#' || FormId || '#~#'
- drop FormLines.
- 'S_SEARCH_FWD 1 1' SearchString
- if RC = 0 then do
- /* form found */
- 'S_DISABLE_WINDOW'
- /* get Info from header line */
- 'S_SELECT_LINE'
- 'S_GET_SELECTED_TEXT' 'ActLine'
- ActLine = Left( ActLine, Length(ActLine)-2)
- parse value ActLine with SearchString . 'info:' FormName 'pos:' FormIndent FormMargin ttrest
- FormName = Strip(FormName)
- FormIndent = Left(FormIndent,1)
- /* for center and right, check margin */
- if FormIndent = '!' | FormIndent = '>' then do
- /* a non numeric margin value forces query */
- do 3 while Datatype(FormMargin) \= 'NUM'
- 'S_PROMPT Right Margin, FormMargin'
- if FromMargin = 'CANCEL' then do
- 'S_GET_FILE_BUFFNUM' ActFileName 'ActBuffNo'
- 'S_GOTO_BUFF' ActBuffNo
- 'S_ENABLE_WINDOW'
- exit
- end
- end
- /* if margin = 0 take line legth over insert */
- if FormMargin = 0 then
- FormMargin = LastLineLen
- end
- /* cursor align will be shifted with blanks */
- if FormIndent = '.' & CurrentColNo > 1 then
- FormShift = copies(' ',CurrentColNo-1)
- else
- FormShift = ''
- /* get lines from form until end mark */
- do NoLines = 1 for 99
- 'S_SELECT_LINE'
- 'S_GET_SELECTED_TEXT' 'ActLine'
- if Compare(ActLine,'#~#end----') >= 8 then leave
- FormLines.NoLines = FormShift || BuildFormLine(ActLine)
- if FormIndent = '!' then
- FormLines.NoLines = Strip( Center(FormLines.NoLines, FormMargin), 't')
- else if FormIndent = '>' & Length( FormLines.NoLines) < FormMargin then
- FormLines.NoLines = Copies(' ', FormMargin - Length( FormLines.NoLines) ) || FormLines.NoLines
- end NoLines
- 'S_ENABLE_WINDOW'
- 'S_GET_FILE_BUFFNUM' ActFileName 'ActBuffNo'
- 'S_GOTO_BUFF' ActBuffNo
- 'S_DISABLE_WINDOW'
- if NoLines \= 0 then do
- do i=1 to NoLines-1
- if Length(FormLines.i) > 80 then do
- 'S_INSERT_LINE' Substr(FormLines.i, 80)
- 'S_PREV_LINE'
- 'S_BEG_OF_LINE'
- 'S_INSERT_STRING' Left(FormLines.i, 79)
- 'S_BEG_OF_LINE'
- 'S_NEXT_LINE'
- end
- else
- 'S_INSERT_LINE' FormLines.i
- end i
- end
- 'S_SAVE_POS'
- 'S_GOTO_COL' CurrentColNo
- 'S_GOTO_LINE' CurrentLinNo
- SearchString = '#^#'
- 'S_SEARCH_FWD 1 1' SearchString
- if RC = 0 then 'S_DEL_SELECTED'
- else 'S_GOTO_POS'
- 'S_ENABLE_WINDOW'
- end
- else do
- /* form not found */
- 'S_MSG' 'Form "'||FormId||'" does not exist, Create new form?,, RESULT'
- if RESULT = 'CANCEL' then
- exit
- 'S_PROMPT Form "'||FormId||'" enter "Information; [.<>!] margin", RESULT'
- if RESULT = 'CANCEL' then
- exit
- parse value RESULT with FormName ";" FormIndent FormMargin ttrest
- NewItem = Left('#~#'||FormId||'#~#',25)||'info: '||Left(FormName, 35)||'pos:'||FormIndent||' '||FormMargin
- 'S_GET_CURR_EDITMODE Emode'
- if Emode = 'READONLY' then
- 'S_CHG_EDITMODE'
- 'S_END_OF_FILE'
- 'S_INSERT_LINE' NewItem
- if CurrentSelLen > 0 then
- 'S_INSERT_PASTE'
- 'S_INSERT_LINE #~#end---------------------------------------------------'
- 'S_SAVE_CURR_FILE'
- 'S_CHG_EDITMODE'
- 'S_GET_FILE_BUFFNUM' ActFileName 'ActBuffNo'
- 'S_GOTO_BUFF' ActBuffNo
- 'S_ENABLE_WINDOW'
- if CurrentSelLen > 0 then
- exit
- 'S_GET_FILE_BUFFNUM' FormFile 'ActBuffNo'
- 'S_GOTO_BUFF' ActBuffNo
- 'S_CHG_EDITMODE'
- 'S_PREV_LINE'
- 'S_INSERT_LINE {new form text goes here}'
- 'S_PREV_LINE'
- 'S_GOTO_COL' 3
- 'S_SELECT_BRACED_CODE'
- end
- exit
-
- BuildFormLine: Procedure expose CurrentWord CurrentSelected CurrentColNo CurrentLine CurrentEOL ActFileName
- parse arg ActLine
- ActLine = Left( ActLine, Length( ActLine)-2)
- CaretPos = 1
- do forever
- drop OverlayText
- CaretPos = Pos("^", ActLine, CaretPos) ;
- if CaretPos = 0 then leave
- SubLine = Substr(ActLine, CaretPos)
- select
- when Abbrev(SubLine, '^FILENAME^') then do
- OverlayText = ActFileName
- MatchLen = 10
- end
- when Abbrev(SubLine, '^CL^') then do
- OverlayText = CurrentLine
- MatchLen = 4
- end
- when Abbrev(SubLine, '^CW^') then do
- OverlayText = CurrentWord
- MatchLen = 4
- end
- when Abbrev(SubLine, '^CE^') then do
- OverlayText = CurrentEOL
- MatchLen = 4
- end
- when Abbrev(SubLine, '^SEL^') then do
- OverlayText = CurrentSelected
- MatchLen = 5
- end
- when Abbrev(SubLine, '^DATE') then do
- if Substr( SubLine, 6, 1) = '.' then do
- tchr = Substr( SubLine, 7, 1)
- if Pos(tchr, "BDELMNOSUW") \= 0 then
- OverlayText = Date(tchr)
- else
- OverlayText = '?'|| tchr || '!in(BDELMNOSUW)?'
- MatchLen = 8
- end
- else do
- OverlayText = Date()
- MatchLen = 6
- end
- end
- when Abbrev(SubLine, '^TIME') then do
- if Substr( SubLine, 6, 1) = '.' then do
- tchr = Substr( SubLine, 7, 1)
- if Pos(tchr, "CEHLMNRS") \= 0 then
- OverlayText = Time(tchr)
- else
- OverlayText = '?'|| tchr || '!in(CEHLMNRS)?'
- MatchLen = 8
- end
- else do
- OverlayText = Time()
- MatchLen = 6
- end
- end
- otherwise
- if Substr( SubLine, 2, 1) = '%' then do
- tPos = Pos('%', SubLine, 3)
- EnvVarName = Substr( Subline, 3, tPos - 3)
- 'S_GET_ENV_INFO' EnvVarName 'OverlayText'
- if RC > 0 then
- OverlayText = '?%' || EnvVarName || '%?'
- MatchLen = tPos + 1
- end
- else
- MatchLen = 1
- end
- if MatchLen > 1 then
- ActLine = Overlay(OverlayText, ActLine, CaretPos, Max(Length(OverlayText),MatchLen))
- CaretPos = CaretPos + MatchLen
- end
- return ActLine
-
- GetReplacement: Procedure expose FormFile ActFileName OldText
- parse arg SearchString
- 'S_GET_FILE_BUFFNUM' FormFile 'ActBuffNo'
- if RC = 0 then do
- 'S_GOTO_BUFF' ActBuffNo
- end
- else
- 'S_OPEN_SL_FILE 0 R N' FormFile
- 'S_SEARCH_FWD 1 1' SearchString
- if RC = 0 then do
- 'S_SELECT_LINE'
- 'S_GET_SELECTED_TEXT SelText'
- parse value SelText with SearchString Replacement
- Replacement = Left(Replacement, Length(Replacement)-2)
- end
- else do
- Call NewTranslation OldText
- Replacement = RESULT
- end
- 'S_GET_FILE_BUFFNUM' ActFileName 'ActBuffNo'
- 'S_GOTO_BUFF' ActBuffNo
- return Replacement
-
- NewTranslation: Procedure
- parse arg NewItem
- ptext = 'Translation for "' NewItem '",'
- 'S_PROMPT' ptext Translate
- if Translate = 'CANCEL' | Translate = '' then
- return NewItem
- NewItem = '~#~' || NewItem || ': ' || Translate
- 'S_CHG_EDITMODE'
- 'S_BEG_OF_FILE'
- 'S_INSERT_LINE' NewItem
- 'S_SAVE_CURR_FILE'
- 'S_CHG_EDITMODE'
- return Translate
-
-