home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #3
/
amigamamagazinepolishissue1998.iso
/
bazy
/
config_server
/
bin
/
config-editor.rexx
next >
Wrap
OS/2 REXX Batch file
|
1995-03-13
|
14KB
|
594 lines
/*
** $Id: config-editor.rexx,v 1.1 1995/02/12 22:13:08 rkr Exp $
**
** config-editor provides you with a means to edit the config-server
** database.
**
*/
call init( )
address value host
options results
do while ~done
call do_app_list( )
end
exuent:
call cls( )
address command 'set_con'
exit prog_ret
init:
host = 'config-server'
if ~show( 'p', host ) then
do
say 'Could not find configuration host, {'config-server'}.'
say 'Exiting.'
prog_ret = 10
signal exuent
end
address command 'set_raw'
prog_ret = 0
done = 0
call init_display( )
return
do_app_list:
call list_apps( )
current_app = 1
call sync_disp_apps( )
dal_done = 0
do until dal_done
dal_event = get_key( )
select
when 'UP' == dal_event then
call adjust_current_app( -1 )
when 'DOWN' == dal_event then
call adjust_current_app( +1 )
when 'RIGHT' == dal_event | '0d'x == dal_event then
dal_done = do_app( )
when 'LEFT' == dal_event then
call beep( )
when 'Q' = upper( dal_event ) then
dal_done = 1
when 'R' == upper( dal_event ) then
do
'reload'
call list_apps( )
current_app = 1
call sync_disp_apps( )
end
when 'S' == upper( dal_event ) then
'save'
when '7f'x == dal_event | 'D' = upper( dal_event ) then
call delete_current_app( )
otherwise
nop
end
end
done = 1
return
list_apps:
apps. = ''
'getattr apps'
parse var result 'TEXT:' apps
apps_clone = apps
apps.count = length( apps ) - length( compress( apps, ':' ) )
apps.max_len = 0
do i = 1 for apps.count
parse var apps app ':' apps
apps.i = app
apps.max_len = max( length( app ), apps.max_len )
end
apps.i = '::Quit::'
apps.count = i
apps.max_len = max( length( apps.i ), apps.max_len )
return
sync_disp_apps:
call show_apps( )
call highlight_current_app( )
return
show_apps:
call cls( )
say '::Applications::'
say
call push_mode( 'inverse' )
sa_max_len = apps.max_len + 2
do i = 1 for apps.count
say '' left( apps.i, sa_max_len )
end
call pop_mode( )
return
show_current_app:
call pos_cursor( current_app + 2, 2 )
call writech( 'STDOUT', apps.current_app )
call pos_cursor( current_app + 2, 2 )
return
highlight_current_app:
call push_mode( 'inverse underline' )
call show_current_app( )
call pop_mode( )
return
adjust_current_app:
parse arg aca_adj
aca_new = current_app + aca_adj
aca_new = max( min( apps.count, aca_new ), 1 )
if aca_new = current_app then
call beep( )
else
do
call push_mode( 'inverse' )
call show_current_app( )
current_app = aca_new
call highlight_current_app( )
call pop_mode( )
end
return
delete_current_app:
'remattr app' apps.current_app
call list_apps( )
call sync_disp_apps( )
return
do_app:
da_ret = 0
if '::Quit::' = apps.current_app then
da_ret = 1
else
do
current_app_name = apps.current_app
call list_tags( )
current_tag = 1
call sync_disp_tags( )
da_done = 0
do until da_done
da_event = get_key( )
select
when 'UP' == da_event then
call adjust_current_tag( -1 )
when 'DOWN' == da_event then
call adjust_current_tag( +1 )
when 'RIGHT' == da_event | '0d'x == da_event then
da_done = do_tag_subs( )
when 'LEFT' == da_event | 'Q' == upper( da_event ) then
da_done = 1
when '7f'x == da_event | 'D' == upper( da_event ) then
call delete_current_tag( )
otherwise
nop
end
end
call list_apps( )
call sync_disp_apps( )
end
return da_ret
list_tags:
tags. = ''
'getattr tags' current_app_name
parse var result 'TEXT:' tags
tags_clone = tags
tags.count = length( tags ) - length( compress( tags, ':' ) )
tags.max_len = 0
do i = 1 for tags.count
parse var tags tag ':' tags
tags.i = tag
tags.max_len = max( length( tag ), tags.max_len )
end
tags.i = '::Quit::'
tags.count = i
tags.max_len = max( length( '::Quit::' ), tags.max_len )
return
sync_disp_tags:
call show_tags( )
call highlight_current_tag( )
return
show_tags:
call cls( )
say '::Tags for' current_app_name'::'
say
call push_mode( 'inverse' )
st_max_len = tags.max_len + 2
do i = 1 for tags.count
say '' left( tags.i, st_max_len )
end
call pop_mode( )
return
show_current_tag:
call pos_cursor( current_tag + 2, 2 )
call writech( 'STDOUT', tags.current_tag )
call pos_cursor( current_tag + 2, 2 )
return
highlight_current_tag:
call push_mode( 'inverse underline' )
call show_current_tag( )
call pop_mode( )
return
adjust_current_tag:
parse arg act_adj
act_new = current_tag + act_adj
act_new = max( min( tags.count, act_new ), 1 )
if act_new = current_tag then
call beep( )
else
do
call push_mode( 'inverse' )
call show_current_tag( )
current_tag = act_new
call highlight_current_tag( )
call pop_mode( )
end
return
delete_current_tag:
dct_tag = tags.current_tag
dct_app_tag = current_app_name':'dct_tag"'S"
'remattr tag' dct_app_tag
call list_tags( )
call sync_disp_tags( )
return
do_tag_subs:
dts_ret = 0
if '::Quit::' = tags.current_tag then
dts_ret = 1
else
do
current_tag_name = tags.current_tag
call list_tag_subs( )
current_tag_sub = 1
call sync_disp_tag_subs( )
dts_done = 0
do until dts_done
dts_event = get_key( )
select
when 'UP' == dts_event then
call adjust_current_tag_sub( -1 )
when 'DOWN' == dts_event then
call adjust_current_tag_sub( +1 )
when 'RIGHT' == dts_event | '0d'x == dts_event then
dts_done = do_specific_tag( )
when 'LEFT' == dts_event | 'Q' == upper( dts_event ) then
dts_done = 1
when 'I' == upper( dts_event ) then
call insert_new_tag_sub( )
when '7f'x == dts_event | 'D' == upper( dts_event ) then
call delete_current_tag_sub( )
otherwise
nop
end
end
call list_tags( )
call sync_disp_tags( )
end
return dts_ret
list_tag_subs:
tag_subs. = ''
'getattr tag' current_app_name':'current_tag_name"'S"
parse var result 'TEXT:' tag_subs.count
tag_subs.max_len = 0
do i = 1 for tag_subs.count
'getattr tag' current_app_name':'current_tag_name'.'i
tag_subs.i = result
tag_subs.max_len = max( length( tag_subs.i ), tag_subs.max_len )
end
tag_subs.i = '::Quit::'
tag_subs.count = i
tag_subs.max_len = max( length( '::Quit::' ), tag_subs.max_len )
return
sync_disp_tag_subs:
call show_tag_subs( )
call highlight_current_tag_sub( )
return
show_tag_subs:
call cls( )
say '::Tag subs for' current_app_name':'current_tag_name'::'
say
call push_mode( 'inverse' )
sts_max_len = tag_subs.max_len + 2
do i = 1 for tag_subs.count
say '' left( tag_subs.i, sts_max_len )
end
call pop_mode( )
return
show_current_tag_sub:
call pos_cursor( current_tag_sub + 2, 2 )
call writech( 'STDOUT', tag_subs.current_tag_sub )
call pos_cursor( current_tag_sub + 2, 2 )
return
highlight_current_tag_sub:
call push_mode( 'inverse underline' )
call show_current_tag_sub( )
call pop_mode( )
return
adjust_current_tag_sub:
parse arg acts_adj
acts_new = current_tag_sub + acts_adj
acts_new = max( min( tag_subs.count, acts_new ), 1 )
if acts_new = current_tag_sub then
call beep( )
else
do
call push_mode( 'inverse' )
call show_current_tag_sub( )
current_tag_sub = acts_new
call highlight_current_tag_sub( )
call pop_mode( )
end
return
delete_current_tag_sub:
dcts_tag = current_tag_name'.'current_tag_sub
dcts_app_tag = current_app_name':'dcts_tag
'remattr tag' dcts_app_tag
call list_tag_subs( )
call sync_disp_tag_subs( )
return
insert_new_tag_sub:
ints_quit = ('::Quit::' == tag_subs.current_tag_sub)
if ints_quit & (current_tag_sub > 1) then
call beep( )
else
do
ints_def_app = current_app_name
ints_def_tag = current_tag_name
if current_tag_sub == tag_subs.count then
do
/* ints_def_num = '' */
ints_def_enc = 'TEXT'
ints_def_val = ''
end
else
do
/* ints_def_num = current_tag_sub */
'getattr tag' ints_def_app':'ints_def_tag'.'current_tag_sub
parse var result ints_def_enc':'ints_def_val
end
call cls( )
/* say '::New application:encoding:tag.num:value::' */
say '::New application:encoding:tag:value::'
say
say 'Data:'
say ' app:' ints_def_app
say ' enc:' ints_def_enc
say ' tag:' ints_def_tag
say ' num: ---' /*** ints_def_num ***/
say ' val:' ints_def_val
call set_con( )
call pos_cursor( 10, 1 )
call writech( 'STDOUT', 'App: ' )
call push_mode( 'inverse' )
ints_app = readln( 'STDIN' )
if '' == ints_app then
ints_app = ints_def_app
ints_app = compress( ints_app, ':' )
call pos_cursor( 4, 8 )
call writech( 'STDOUT', left( ints_app, 64 ) )
call pop_mode( )
call pos_cursor( 10, 1 )
call writech( 'STDOUT', 'Enc: ' )
call push_mode( 'inverse' )
ints_enc = readln( 'STDIN' )
if '' == ints_enc then
ints_enc = ints_def_enc
ints_enc = compress( ints_enc, ':' )
call pos_cursor( 5, 8 )
call writech( 'STDOUT', left( ints_enc, 64 ) )
call pop_mode( )
call pos_cursor( 10, 1 )
call writech( 'STDOUT', 'Tag: ' )
call push_mode( 'inverse' )
ints_tag = readln( 'STDIN' )
if '' == ints_tag then
ints_tag = ints_def_tag
ints_tag = compress( ints_tag, "'.:" )
call pos_cursor( 6, 8 )
call writech( 'STDOUT', left( ints_tag, 64 ) )
call pop_mode( )
/*
** call pos_cursor( 10, 1 )
** call writech( 'STDOUT', 'Num: ' )
** call push_mode( 'inverse' )
** ints_num = readln( 'STDIN' )
** if ~datatype( ints_num, 'n' ) then
** ints_num = ints_def_val
** call pos_cursor( 7, 8 )
** call writech( 'STDOUT', left( ints_num, 64 ) )
** call pop_mode( )
**
*/
call pos_cursor( 10, 1 )
call writech( 'STDOUT', 'Val: ' )
call push_mode( 'inverse' )
ints_val = readln( 'STDIN' )
if '' == ints_val then
ints_val = ints_def_val
call pos_cursor( 8, 8 )
call writech( 'STDOUT', left( ints_val, 64 ) )
call pop_mode( )
call set_raw( )
'addattr tag' ints_app':'ints_enc':'ints_tag':'ints_val
call list_tag_subs( )
call sync_disp_tag_subs( )
end
return ''
do_specific_tag:
dst_ret = 0
if '::Quit::' = tag_subs.current_tag_sub then
dst_ret = 1
else
call beep( )
return dst_ret
/*
** Screen editing functions
**
*/
init_display:
call cls( )
mode. = ''
mode.count = 0
return
cls:
call writech( 'STDOUT', '0c'x )
return
push_mode:
parse arg pm_add
pm_c = mode.count
pm_old = mode.pm_c
pm_new = '' pm_old ''
do i = 1 for words( pm_add )
if 0 = pos( '' word( pm_add, i ) '', pm_new ) then
pm_new = pm_new || word( pm_add, i ) ''
end
pm_c = pm_c + 1
mode.pm_c = strip( pm_new )
mode.count = pm_c
call display_mode( )
return
pop_mode:
mode.count = mode.count - 1
if 0 > mode.count then
mode.count = 0
call display_mode( )
return
display_mode:
dm_out = '9b'x || '0'
dm_c = mode.count
dm_modes = mode.dm_c
do i = 1 for words( dm_modes )
dm_umode = upper( word( dm_modes, i ) )
select
when 'BOLD' == dm_umode then
dm_out = dm_out';1'
when 'STANDOUT' = dm_umode then
dm_out = dm_out';2'
when 'ITALICS' = dm_umode then
dm_out = dm_out';3'
when 'UNDERLINE' = dm_umode then
dm_out = dm_out';4'
when 'INVERSE' == dm_umode then
dm_out = dm_out';7'
otherwise
nop
end
end
call writech( 'STDOUT', dm_out'm' )
return
pos_cursor:
parse arg pc_row, pc_col
call writech( 'STDOUT', '9b'x || pc_row';'pc_col'H' )
return
get_key:
gk_ret = readch( 'STDIN', 1 )
if '1b'x == gk_ret then
do
gk_ret = gk_ret || readch( 'STDIN', 1 )
if '1b5b'x == gk_ret then
gk_ret = '9b'x
end
if '9b'x = gk_ret then
do
gk_ret = gk_ret || readch( 'STDIN', 1 )
select
when '9b41'x == gk_ret then
gk_ret = 'UP'
when '9b42'x == gk_ret then
gk_ret = 'DOWN'
when '9b43'x == gk_ret then
gk_ret = 'RIGHT'
when '9b44'x == gk_ret then
gk_ret = 'LEFT'
otherwise
gk_ret = ''
end
end
return gk_ret
beep:
return writech( 'STDOUT', '07'x )
set_con:
address command 'set_con'
return 1
set_raw:
address command 'set_raw'
return 1