ViewFrame

`Viewframe', by Creative Digital Inc. (293 Corbett Avenue, San Francisco CA 94114) can transfer soups with XModem protocol (i.e. with error checking, but with extraneous bytes to make the file size an exact multiple of 256. Strange, but true). This is done with one of the ViewFrame's additions, VF+Transfer. The advantage of ViewFrame over Slurpee is that ViewFrame can transfer any block of displayed text, whereas Slurpee (to the best of my knowledge) can only tranfer editable text.

Of course, the problem is to actually find the soup containing the data you want to transfer. It is best to use the `ViewFinder', and tap either the `Front' or `FrontApp' button. This will show the front frame, or the frame of the front application. Unfortunately, you may need to continue to tap `Kids' button and make choices until the required soup is found.

To make matters worse, ViewFrame often requires considerable heap space to find out what children a particular frame has. It may not be possible to `tap' your way to the appropriate soup. Instead, you might need to type in the name of the child directly into `Full ViewFrame window'.

For example, if you display the `chart note' in PocketDoc, you can tap the `Front' or `Front App' button. You can then type into the Expression Entry Area...

pd_shell_win_link.handP_win_link.H_P_Ov.text

The full stops separate children, so `text' is a child of `H_P_Ov'. In turn, `H_P_Ov' is a child of `handP_win_link' etc.

For example, if I tap the `Front' button, I was recently presented with the `handP_win_link'. I could not tap the `Kids' button any further, as Viewframe ran out of heap. I changed to the full Viewframe window, and evaluated the expression `.H_P_Ov'. Among the slots displayed was the `text' entry, which I then directly tapped to reach the summary.

Of course, the best option is to go as far as you can with the `Kids' button, and then enter the appropriate text into the Expression Entry Area. You may end up only needing to enter `H_P_Ov.txt', or you might be able to tap your way right down to `txt', and not need to enter anything into the Expression Entry Area.

If the above explanation sounds confusing, it is. After all, ViewFrame is a debugging tool for programmers...

For Amiga users, the transferred soup has two problems. First, ViewFrame will send over a Unicode text files. Every second byte is a NULL (ASCII 0) character. To get rid of these, try the following ARexx script...

/* Strip nulls returns (ASCII 0) from a file */
/* Written by David Fong 24th January 1995       */
parse arg filenames
parse var filenames infile ' ' outfile

say 'Null stripper'
say 'Removes nulls (ASCII 0) from a file'
say 'by David Fong 16th June 1996'
say ''

if arg() ~= 1 | outfile == '' | infile == '' then do
 say 'Incorrect number of arguments'
 say 'Usage : nullstrip infile outfile'
 exit
 end

if open('in',infile,'r') then do
 if open('out',outfile,'w') then do
  do while ~eof('in')
   a=readch('in',2048)
   writech('out',compress(a,d2c(0)))
   writech('STDOUT','**')
   end
  close('out')
  end
 else
  say 'Could not open "'outfile'" for writing.'
 close('in')
 end
else
 say 'Could not open "'infile'" for reading.'

say ''
exit

If you `protect nullstrip.rexx +s', then nullstrip.rexx can be run directly from the shell (this assumes you name the above script nullstrip.rexx). Otherwise you could type into the shell something like `rx nullstrip.rexx File1 File2'

Unfortunately, the file that remains uses carriage returns (ASCII 13) instead of line feeds (ASCII 10). So try the following ARexx script...

/* Convert carriage returns (ASCII 13) to line feeds (ASCII 10) from a file */
/* Written by David Fong 24th January 1995       */
parse arg filenames
parse var filenames infile ' ' outfile

say 'Carriage return stripper'
say 'Convert CRs (ASCII 13) to LFs (ASCII 10) from a file'
say 'by David Fong 24th January 1995'
say ''

if arg() ~= 1 | outfile == '' | infile == '' then do
 say 'Incorrect number of arguments'
 say 'Usage : crlfconvert infile outfile'
 exit
 end

if open('in',infile,'r') then do
 if open('out',outfile,'w') then do
  do while ~eof('in')
   a=readch('in',2048)
   writech('out',translate(a,d2c(10),d2c(13)))
   writech('STDOUT','**')
   end
  close('out')
  end
 else
  say 'Could not open "'outfile'" for writing.'
 close('in')
 end
else
 say 'Could not open "'infile'" for reading.'

say ''
exit

Link to homepageBack to Newton page

Last modified 25th April 1998.