Getting a *standalone* to read & write to/from text file?

T. R. Ponn alptex2 at orwell.net
Thu Mar 17 09:35:06 EST 2005


Steve,

Here's what I've done and though not the prettiest code in the world, it 
has worked solidly for me for the last couple years on Mac, Win and Lin. 
I haven't tried the OSX portion...so caution:

global allStatusLo

on openStack
 put whichMachine(platform()) into thisMachine
 put thisMachine&"V2.0.002" into fld "Version" of card "Main"
 do "setUp"&thisMachine
 put thisMachine into line 16 of allStatusLo
 set the maxHeight of this stack to "475"
 set the maxWidth of this stack to "640"
 set the resizable of this stack to true
end openStack

function whichMachine thisPlatform
 if thisPlatform="MacOS" then
   set the itemDelimiter to "." -- OS versions are of the form "x.y.z"
   if item 1 of the systemVersion >= 10 then
     put "OSX" into thisMachine
   else
     put "Mac" into thisMachine
   end if
 else if thisPlatform="Linux" then put "Lin" into thisMachine
 else if thisPlatform="Win32" then put "Win" into thisMachine
 else put "???" into thisMachine
 return thisMachine
end whichMachine

on setUpMac
 set the itemDelimiter to "/"
 put (item 1 to -2 of the effective filename of this stack)&"/" into 
appFolderPath
 get url ("file:"&appFolderPath&"ieCfg.txt")
 if it is empty then
   get restoreConfig(appFolderPath&"ieCfg.txt")
 else
   put it into allStatusLo
 end if
 put appFolderPath into line 26 of allStatusLo
 put "Quit/Q" into line 2 of btn "File" of card "Main"
 put "Help/?" into line 1 of btn "Help" of card "Main"
 set the decorations of this stack to default
end setUpMac

on setUpOSX
 set the itemDelimiter to "/"
 put (item 1 to -2 of the effective filename of this stack)&"/" into 
appFolderPath
 get url ("file:"&appFolderPath&"ieCfg.txt")
 if it is empty then
   get restoreConfig(appFolderPath&"ieCfg.txt")
 else
   put it into allStatusLo
 end if
 put appFolderPath into line 26 of allStatusLo
 put "Quit/Q" into line 2 of btn "File" of card "Main"
 put "Help/?" into line 1 of btn "Help" of card "Main"
 set the decorations of this stack to default
end setUpOSX

on setUpWin
 set the itemDelimiter to "/"
 put (item 1 to -2 of the effective filename of this stack)&"/" into 
appFolderPath
 get url ("file:"&appFolderPath&"ieCfg.txt")
 if it is empty then
   get restoreConfig(appFolderPath&"ieCfg.txt")
 else
   put it into allStatusLo
 end if
 put appFolderPath into line 26 of allStatusLo
 put "Exit/E" into line 2 of btn "File" of card "Main"
 put "Help/H" into line 1 of btn "Help" of card "Main"
 set the decorations of this stack to "minimize, maximize, menu"
end setUpWin

on setUpLin --Set up for Linux and other *nix boxes.
 put fld "AppName" of card "Main"&fld "Version" of card "Main" into 
appNameVers
 replace "." with "" in appNameVers
 get shell("env") --Get details about the *nix environment.
 get line (lineOffset("PWD=",it)) of it
 if the last char of it<>"/" then get it&"/"
 if appNameVers is not in it then
   put char 5 to -1 of it&appNameVers into appFolderPath
 else
   put char 5 to -1 of it into appFolderPath
 end if
 if the last char of appFolderPath<>"/" then put "/" after appFolderPath
 set the defaultFolder to appFolderPath --set the global rev property 
"defaultFolder" to the path from the preceeding line.
 get the detailed files --get the detailed list of files in the 
"defaultFolder".
 put line (lineOffset("ieCfg.txt",it)) of it into heresCfg --find the 
"ieCfg" file details in the list and put that info into a variable.
 if heresCfg is empty then
   get restoreConfig(appFolderPath&"ieCfg.txt")
 else
   get shell("chmod 755"&&(appFolderPath&"ieCfg.txt")) -- Set 
permissions to read/write/exe, read/exe, read/exe...User, Group, Other
   get url ("file:"&appFolderPath&"ieCfg.txt")
   if it is empty then
     get restoreConfig(appFolderPath&"ieCfg.txt")
     get shell("chmod 755"&&(appFolderPath&"ieCfg.txt")) -- Set 
permissions to read/write/exe, read/exe, read/exe...User, Group, Other
   else
     put it into allStatusLo
   end if
 end if
 put appFolderPath into line 26 of allStatusLo
 put "Exit/E" into line 2 of btn "File" of card "Main"
 put "Help/H" into line 1 of btn "Help" of card "Main"
 set the decorations of this stack to "minimize, maximize, menu"
end setUpLin

function restoreConfig appCfgPath
 answer warning "Sorry, but your Config File is missing or 
corrupt."&cr&"It will be restored to the default condition."&cr&"id0000"
 -- I've truncated the following line so as not to bore the reader too 
much.  In reality, I end up with around 45 lines of cfg stuff.
 put 
"0"&cr&"0"&cr&"0"&cr&cr&"192.168.0.210"&cr&"2000"&cr&&cr&"File"&cr&cr&"000000000000" 
into allStatusLo
 put allStatusLo into url ("file:"&appCfgPath)
end restoreConfig



Steve Bonham wrote:

> My stack works perfectly UNTIL it is saved as a standalone.
> Then while opening the standalone gets hung/stuck- will not open!
>
> I've isolated the code that is making the runtime version hang. If I 
> make this section a comment it launches (as a standalone) BUT I need 
> to be able to read from an external text file so I've got to get this 
> function to work.
>
> The following lines of Transcript are within the "on openstack" script.
> This is what is supposed to happen:
>
> a. as stack opens it imports preferences from "TJsettings.txt" IF the 
> files exists (and rev is told to look in the same directory my stack 
> is in) to a variable named theSettings
>
>     OTHERWISE (there is NOT a TJsettings.txt file)
>
> b. a default "TJsettings.txt" file (that the stack will save prefs to 
> "on closestack") is created in the same folder my standalone/stack is 
> in and that data is imported to a variable named theSettings
>
> What's in here that is so hostile?
> ----------------------------------------------------------------
> put the filename of this stack into MyPathWay
>   repeat until the last char of myPathWay is "/"
>     delete last char of MyPathWay
>   end repeat
>
>   put myPathWay & "TJsettings.txt" into MyPathWay
>
>   ----------------
>   if there is a file myPathWay then
>     answer myPathway ----- just a debugging attempt--  DELETE 
> LATER-----------
>     put URL ("file:" & myPathWay) into TheSettings
>   else
>     put "1. CURRENT SETTINGS as of " & the long date &  " - " & the 
> long time & return & fld "generic" into URL ("file:" & myPathWay)
>     put URL ("file:" & myPathWay) into TheSettings
>   end if
>
> ----------------------------------------------------------------
>
>>> I've got my Rev stack writing data to an external file each time it 
>>> is used.
>>>
>>> Some times the data is 20 lines long some times it is only 10.
>>>
>>> I've just realized that IF it had 20 lines previously and this time 
>>> it only write 10-- lines 11 to 20 from the previous time are STILL 
>>> in the file! This is a problem.
>>>
>>> What's the solution?
>>> Delete the file prior to opening (recreating) it again?
>>> Is there an option to put or write empty into a file?
>>>
>> Are you using the URL form of file writing or are you opening the 
>> file, writing to it and closing it again?
>> I THINK, that if you use the URL command, it will overwrite the 
>> current contents of the file with whatever you specify, which can be 
>> anything, including empty
>> e.g. put empty into URL ("file:" & myFileName)
>>
>> Cheers,
>> Sarah
>>
>> _______________________________________________
>> use-revolution mailing list
>> use-revolution at lists.runrev.com
>> http://lists.runrev.com/mailman/listinfo/use-revolution
>
>
>




More information about the Use-livecode mailing list