Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Jan-Erik Lärka

Pages: 1 ... 14 15 [16] 17 18
226
Programming / Schedule Wake Up with DragText 3.x
« on: February 06, 2014, 03:51:35 pm »
Hello,

I use my computer to wake me up in the morning.

The excellent DragText 3.9 add convenient drag & drop functions that I sometime forget is not present elsewhere when I have to use other systems. DragText also contain a scheduler and the documentation is straight forward and mention how to set the variables, but I can't find a way to complete the setup with the script as the text for REPEAT puzzle me a bit.

"REPEAT = ON | OFF
Set the object to reopen on a regular basis. The year must have 4 digits; the month and day must have 2."

The only possible settings for REPEAT is therefore ON or OFF.

How do I set the repeat interval with the information above, or...?



The code below should create Program objects in your Utilities folder that point to a script called AxelF.cmd placed in the same folder as this script. Day, date and start time will be set, but it can't quite yet complete the setup unless you set the interval by hand and activate each scheduled Program Object.

//Jan-Erik
Code: [Select]
/*
 * Filename: wakeup.cmd
 *   Author: JAN-ERIK
 *  Created: Sun Jan 26 2014
 *  Purpose: Script to create schedule of wake up tunes.
 *  Changes:
 */

/* Load RexxUtil Library */
IF RxFuncQuery( 'SysLoadFuncs' ) THEN
DO
    CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
    CALL SysLoadFuncs
END

folder = '<WP_TOOLS>'
prefix = 'Alarm '
app = DIRECTORY()||'\AxelF.cmd'

day.1 = 'MONDAY'
day.2 = 'TUESDAY'
day.3 = 'WEDNESDAY'
day.4 = 'THURSDAY'
day.5 = 'FRIDAY'
day.6 = 'SATURDAY'
day.7 = 'SUNDAY'
day.0 = 7

/* Set the wake up Time */
day.1.t = '06:00:00'
day.2.t = '05:10:00'
day.3.t = '06:00:00'
day.4.t = '05:10:00'
day.5.t = '06:00:00'
day.6.t = '08:00:00'
day.7.t = '08:00:00'

/* Translate to your own language */
day.1.n = 'Monday'
day.2.n = 'Tuesday'
day.3.n = 'Wednesday'
day.4.n = 'Thursday'
day.5.n = 'Friday'
day.6.n = 'Saturday'
day.7.n = 'Sunday'

today = TRANSLATE( DATE( 'W' ) )
PARSE VALUE DATE( 'S' ) WITH yyyy +4 mm +2 dd
DO i = 1 TO day.0
    IF today = day.i THEN LEAVE
END
IF i < 7 THEN
DO j = i + 1 TO day.0
    CALL CreateSchedule prefix||day.j.n, folder, 'EXENAME='||app||';OBJECTID=<ALARM_'||day.j||'>;SCHEDULE=ON;DATE='||Unbase( CalcBaseDate( DATE( 'S' ) ) + j )||';TIME='||day.j.t||';REPEAT=ON;ALWAYSOPEN=ON;'
    CALL SysSleep 1
END
IF i > 2 THEN
DO j = 1 TO i
    CALL CreateSchedule prefix||day.j.n, folder, 'EXENAME='||app||';OBJECTID=<ALARM_'||day.j||'>;SCHEDULE=ON;DATE='||Unbase( CalcBaseDate( DATE( 'S' ) ) + j )||';TIME='||day.j.t||';REPEAT=ON;ALWAYSOPEN=ON;'
    CALL SysSleep 1
END
RETURN 0

CreateSchedule: PROCEDURE
/* Remove or Comment out the next line when the code has been completed */
    SAY ARG(3)
    IF SysCreateObject( 'WPProgram', ARG(1), ARG(2), ARG(3), 'U' ) THEN
        SAY '"'||ARG(1)||'" has been created'
    ELSE SAY "Couldn't create "||'"'||ARG(1)||'"'
RETURN 0

DATED: PROCEDURE
    PARSE VALUE DATE( 'S' ) WITH yyyy +4 mm +2 dd
    today = DATE( 'D' )

RETURN 0
PARSE VALUE DATE( 'S' ) WITH yyyy +4 mm +2 dd

UnBase: Procedure
    PARSE ARG x
    If x > 3652058 then Return 'BAD'
    /*  Numeric digits 14 */
    opy = 400  * ( x + 1 ) % 146097
    ddd = x + 1 - ( opy * 365 + opy % 4 - opy % 100 + opy % 400 )
    If ddd = 366 then
    Do
        NLeapYear = ( ( ( opy + 1 ) // 4 ) <> 0 )
        opy = opy + NLeapYear
        If NLeapYear then ddd = 1
    End
    If ddd = 0 then
    Do
        LeapYear = opy // 400 = 0 | ( opy // 4 = 0 & opy // 100 <> 0 )
        ddd = 365 + LeapYear
        opy = opy - 1
    End
Return ISODate( right( opy + 1, 4, 0 ) || right( ddd, 3, 0 ) )

Syntax:
    say 'At line' sigl':' errortext(rc)
Return 'BAD'

ISODate: Procedure
    Parse arg yyyy 5 ddd .
    LeapYear = yyyy // 400 = 0 | ( yyyy // 4 = 0 & yyyy // 100 <> 0 )
    If ddd > 59 + LeapYear then y = 2 - LeapYear
    Else y = 0
    z = ddd + y + 91
    m = (z * 100 ) % 3055
    d = z - ( m * 3055 ) % 100
Return yyyy'/'right( m - 2, 2, 0 )'/'right( d, 2, 0 )

CalcBaseDate: PROCEDURE
  NonLeap.   = 31
  NonLeap.0  = 12
  NonLeap.2  = 28
  NonLeap.4  = 30
  NonLeap.6  = 30
  NonLeap.9  = 30
  NonLeap.11 = 30

  parse arg cyear +4 cmonth +2 cdate

  if length( cyear ) <= 2 then
    if cyear < 80 then
      fullyear = "20" || cyear
    else
      fullyear = "19" || cyear
  else
    fullyear = cyear

  numyears = fullyear -1
  basedays = numyears * 365
  QuadCentury = numyears % 400
  Century = numyears % 100
  LeapYears = numyears % 4
  basedays = basedays + (((LeapYears - Century) + QuadCentury) - 1)

  do i = 1 to (cmonth -1)
    if i <> "2" then
      basedays = basedays + NonLeap.i
    else /* find if it's a leap year or not */
      if (fullyear // 4) > 0 then
        basedays=basedays + 28
      else
        if ((fullyear // 100) = 0) & ((fullyear // 400) > 0) then
        do
                        /* century not divisble by 400                */
          basedays = basedays + 28
        end /* if */
        else
        do
                        /* quad century or regular leap year          */
          basedays = basedays + 29
        end /* else */
  end /* do */

  basedays = basedays + cdate
return basedays

227
Storage / Re: Using a 1 TB USB hard drive
« on: January 30, 2014, 10:53:37 am »
I use a 2TB USB hard drive (Seagate Backup Plus) to store data on... but not to boot from.

I used DFSee to adjust the size of the existing NTFS partition and created a JFS volume with the appropriate settings.

//Jan-Erik

228
Applications / Re: Updates at http://os2ports.smedley.id.au
« on: January 19, 2014, 08:32:11 pm »
Both sites for "Squid" and "Tor" contain a lot of text.

How do I make them work?!

229
Programming / Re: JSon to Rexx (stem)
« on: January 08, 2014, 02:47:19 pm »
Ahh, I followed the link and like it alot! Really nice!

As a matter of fact, my initial post was aimed at you when I wrote it to use the openweather service.  ;)

//Jan-Erik

Below I've added selection 3 and 4 to the xml-parser if someone would need it.
Code: [Select]
parse_xml_tags: PROCEDURE /* xmlString, tag <<, tag_value>, selection> */
    prev_trace = TRACE( 'O' )
    PARSE UPPER ARG xmlString, tag, val, selection
    start_tag = '<'||tag
    INTERPRET "PARSE VALUE xmlString WITH pre'"||start_tag||val||"'extra'>'post"
    SELECT
        WHEN selection = 1 THEN /* tag */
        DO
            IF LENGTH( extra ) > 0 THEN
            DO
                PARSE VALUE SUBSTR( ARG(1), ABS( LENGTH( xmlString ) - LENGTH( post ) + 1 ) ) WITH pre'<'.
                RETURN pre
            END
        END
        WHEN selection = 2 THEN /* tag value */
            RETURN SUBSTR( ARG(1), ABS( LENGTH( xmlString ) - LENGTH( post ) - LENGTH( extra ) ), LENGTH( extra ) - ( RIGHT( extra, 1 ) = '/' ) )
        WHEN selection = 3 THEN /* tag value */
        DO
            tag_val = SUBSTR( ARG(1), ABS( LENGTH( xmlString ) - LENGTH( post ) - LENGTH( extra ) ), LENGTH( extra ) - ( RIGHT( extra, 1 ) = '/' ) )
            INTERPRET "PARSE CASELESS VALUE tag_val WITH .'"||val||'="'||"'ret_val'"||'"'||"'."
            IF LENGTH( ret_val ) > 0 THEN RETURN ret_val
            INTERPRET "PARSE CASELESS VALUE tag_val WITH .'"||val||"='ret_val ."
            IF LENGTH( ret_val ) > 0 THEN RETURN ret_val
            ELSE RETURN tag_val /* What 2 do else?! */
        END
        WHEN selection = 4 THEN /* tag name value */
        DO
            INTERPRET "PARSE VALUE xmlString WITH pre'"||start_tag||" NAME="||'"'||STRIP( val,, '"' )||'"'||" VALUE="||'"'||"'extra'"||'"'||" />'."
            IF LENGTH( STRIP( extra ) ) = 0 THEN
                INTERPRET "PARSE VALUE xmlString WITH pre'"||start_tag||" NAME="||STRIP( val,, '"' )||" VALUE="||"'extra'"||"/'."
            IF LENGTH( STRIP( extra ) ) = 0 THEN RETURN ''
            start_pos = POS( extra, TRANSLATE( xmlString ) )
            IF start_pos > 0 THEN RETURN SUBSTR( ARG(1), start_pos, LENGTH( extra ) )
            ELSE RETURN ''
        END
        WHEN RIGHT( extra, 1 ) <> '/' THEN
        DO
            end_tag = '</'||tag||'>'
            next = LENGTH( xmlString ) - LENGTH( post ) + 1
            open_tag = next
            INTERPRET "PARSE VALUE post WITH pre'"||end_tag||"'post"
            close_tag = LENGTH( xmlString ) - LENGTH( post ) - LENGTH( end_tag ) + 1
            count = COUNTSTR( start_tag||'>', xmlString, open_tag, close_tag ) + COUNTSTR( start_tag||' ', xmlString, open_tag, close_tag )
            DO WHILE count > 0
                next = close_tag + LENGTH( end_tag )
                close_tag = POS( end_tag, xmlString, next )
                IF close_tag = 0 THEN
                    close_tag = LENGTH( xmlString )
                post = SUBSTR( xmlString, next, close_tag - next )
               
                INTERPRET "PARSE VALUE post WITH .'"||start_tag||"'extra'/>'post"
               
                DO WHILE LENGTH( post ) > 0
                    next = close_tag - LENGTH( post )
                    INTERPRET "PARSE VALUE post WITH .'"||start_tag||"'extra'/>'post"
                END
                count = COUNTSTR( start_tag||'>', xmlString, open_tag, close_tag ) + COUNTSTR( start_tag||' ', xmlString, open_tag, close_tag ) - 1
            END
            IF close_tag = 0 THEN close_tag = LENGTH( ARG(1) ) - open_tag
            ELSE close_tag = close_tag - open_tag
            RETURN SUBSTR( ARG(1), open_tag, MAX( 1, close_tag ) )
        END
        OTHERWISE NOP
    END
    CALL TRACE prev_trace
RETURN ''

I've tested this code with regina that is somewhat limited when it come to PARSE, so you can try to replace:
INTERPRET "PARSE VALUE xmlString WITH pre'"||start_tag||" NAME="||'"'||STRIP( val,, '"' )||'"'||" VALUE="||'"'||"'extra'"||'"'||" />'."
with
val = STRIP( val,, '"' )
PARSE  VALUE xmlString WITH pre(start_tag)' NAME="'(val)'" VALUE="'extra'" />'

230
Programming / Re: JSon to Rexx (stem)
« on: January 07, 2014, 10:44:02 am »
Hello,

That would be awsome Fr4nk, I want it!  :D

I've tested the parsing on various JSon files, but do tell me if you run into problems and want me to look into it!

The script should give you a general idea of how to do it and an XCenter Widget would be so nice to have!

You may have to improve checks within your script somewhat compared to this script to verify what gets returned as the openweather service (or is it the site http://geoip.prototypeapp.com) seem to not return the expected data during updates with the current code.

//Jan-Erik

231
Programming / Re: rexx Screen Capture
« on: December 07, 2013, 02:43:28 pm »
Hello,

for those of you that would like to get a hint...

  • Unpack the .zip-file somewhere, e.g. C:\Desktop\rxImgSize
  • Open a program or folder that contain the title text "rxImgSize" ¹ (e.g. Folder or Archive manager with .zip-file open) and another window that contain the text "Editor" ¹ (e.g. Text Editor).
  • Start a command prompt and run the script "rxtestimgsze"
    • C:\DESKTOP\rxImgSize                                     Show current directory
    • C:\DESKTOP\rxImgSize                                     Show current directory
    • [C:\DESKTOP\rxImgSize]MKDIR IMAGES           Create a subfolder named IMAGES
    • >rxImgSize: version 1.02, GBM: version 1.12<  Show version information about the library itself and GBM
    • >1.02<                                                                Show only information about the library itself
    • >1.12<                                                                Show only information about the GBM library
    • 0                                                                         Capture² window that contain the title text "rximgsize" and save as example0.bmp in the folder images
    • 338 243 24                                                         Show size and color depth for saved image (width height bpp)
    • 0                                                                         Resize example0.bmp to 100 pixels wide (keep aspect) and save the result as example1.jpg in the folder images
    • 0                                                                         Resize example0.bmp to 120 pixels wide (keep aspect) and save the result as example1.bmp in the folder images
    • 0                                                                         Resize example0.bmp to 120x120 pixels and save the result as example2.bmp in the folder images
    • 0                                                                         Resize example0.bmp to 120 pixels high and save the result as example3.bmp in the folder images
    • 0                                                                         Resize example3.bmp to 137 pixels high and replace example3.bmp in the folder images
    • 0                                                                         Read example0.bmp and save it as example4.bmp in the folder images
    • 0                                                                         Resize example4.bmp to 210 pixels wide and replace it
    • 0                                                                         Read and do quality scale (Lanczos) of example1.bmp to 1000x1000 pixels and save it as example5.bmp
    • 0                                                                         Read and do quality scale (Nearestneighbor) of example3.bmp to 2000x2000 pixels and save it as example6.bmp
    • 0                                                                         Read and do quality scale (Lanczos) of example0.bmp to 3000x3000 pixels and save it as example7.bmp
    • 0                                                                         Capture² the desktop and save as example.bmp in the folder images
    • 0                                                                         Capture² interior of window that contain the title text "editor" and save as example8.bmp in the folder images
    • [C:\DESKTOP\rxImgSize]

You should see several rows with 0 (zero) if it is successful ³.
The capture procedure search for window names that match exactly (though caseless comparison) at first, but if it can't find any match look for windows that contain the text.


¹) or "RXIMGSIZE" or "rximgsize" or any variation to it as capitalization doesn't matter
²) the capture procedure will return "RXIMGSIZE not found." if there is no window with that name
³) info/resize/scale etc. will fail with a number depending on the cause. 0 = OK, 2 = missing image/file, etc. See source code for specific reasons.

//Jan-Erik

232
Programming / Re: mPlayer install script & add dereg of old avi codecs ???
« on: December 07, 2013, 11:38:24 am »
Hello,

I'm sure I'm not the only one that would like to see it!
Post or send it any way you like. A link here would be nice as well.

233
Programming / Re: rexx Screen Capture
« on: December 05, 2013, 07:18:27 pm »
Hello,

that would be very nice to add, feel free Martin to do so and repack the .zip-file, but please note that parts of the code has been influenced by GBM (Thanks to the work by Heiko Nitzsche, Germany ).

The string-number-whatever C++ class "var" is my own work that begun during the school days and help me simplify usage to write libraries in C/C++ for rexx.

Btw, anyone found it useful?
Know how to add on-screen-selection-support?

//Jan-Erik

234
Programming / Re: rexx Screen Capture
« on: December 03, 2013, 07:36:31 pm »
Hello,

see the attached .zip-file that contain both a rexx .dll debugger application, the rexx .dll for image manipulation, sources and scripts.

Please do read the source code to find more options and use a recent version of GBM to get support for more file types and quality scaling methods.

The software is provided "AS IS" and you're responsible to understand it's use, what it is intended for and you must take appropriate actions before usage to ensure it doesn't cause harm, problems etc.

//Jan-Erik

235
Programming / rexx Screen Capture
« on: December 01, 2013, 06:20:57 pm »
Hello,

I've managed to write a function in a rexx dll that can capture the screen and save it to a file.

I can post the source code and file here, but would first get your help how to find out the names of open windows (folders, applications etc.) to add that option as well.

Selection of screen coordinates would be nice as well, but I'll await your code before I post the .dll.

Regards,
//Jan-Erik

236
Programming / Rename files and set long name
« on: November 17, 2013, 09:59:08 am »
Hello,

I've searched for a function in rexx to rename files and eventually found the answer...
SysSetObjectData with the second parameter TITLE= together with the new name.
It's quite easy to rename the file/folder that way and to write a rename.cmd

CALL SysSetObjectData file_path_and_name, 'TITLE='||new_name

Recovery scripts and tools ( DFSee, JRescuer ) rely on EA's (Extended Attribute) to restore file names since JFS doesn't have the backup information about the file name within the fs itself. The functions below synchronize the file name and the EA so that such tools can help you in case of problems when you need to recover files. You do however need to run and set the EA before any problem arise that require recovery.

Please do note that I've added code that will remove unwanted characters from the actual file name that annoy me (files from the internet, other OSes etc.) , but you may want to keep those, extend them or tweak it further by altering the function "CleanString".

//Jan-Erik

Code: [Select]
setLongName: PROCEDURE
/* File/Folder name as the first and only parameter (full path) */
    file_name = FILESPEC( 'N', ARG(1) )
/* Read the EA entry for .LONGNAME from the File/Folder */
    rc = SysGetEA( ARG(1), '.LONGNAME', 'EAValue' )
/* Was it possible to read the EA entry for .LONGNAME successfully? */
    IF rc = 0 & EAValue <> '' THEN
    DO
/* Split the information up for further use */
        PARSE VAR EAValue EAType +2 EALength +2 EAValue
/* Does it contain a valid name, then set it */
        IF EAType = 'FDFF'x THEN
        DO
            longName = STRIP( EAValue, 'T', '00'x )
/* Remove unwanted charaters */
           cleanLongName = CleanString( longName )
/* Any changes between the long name and cleaned name? */
           IF cleanLongName <> longName THEN
           DO
/* Set the long name to the one of the cleaned */
               longName = cleanLongName
/* and write the information back */
               CALL SysPutEA ARG(1), '.LONGNAME', 'FDFF'x || D2C( LENGTH( longName ) ) || '00'x || longName
           END
/* If the name is different from the long name */
           IF longName <> file_name THEN
/* If the file/folder can be renamed to the long name, then set the new name */
              IF SysSetObjectData( ARG(1), 'TITLE='||longName ) THEN
                 file_name = longName
        END
        ELSE
            CALL SysPutEA ARG(1), '.LONGNAME', 'FDFF'x || D2C( LENGTH( file_name ) ) || '00'x || file_name
    END
    ELSE
        CALL SysPutEA ARG(1), '.LONGNAME', 'FDFF'x || D2C( LENGTH( file_name ) ) || '00'x || file_name
/* Above: Just write the current name to the EA if none has been set */
/* and return the file/folder with path */
RETURN FILESPEC( 'D', ARG(1) )||FILESPEC( 'P', ARG(1) )||file_name

/* String function */
CleanString: PROCEDURE
    haystack = ARG(1)
/* Clean out % and replace %20 = space, %28 = [, %29 = ] etc. */
    DO WHILE POS( '%', haystack ) > 0
        PARSE VALUE haystack WITH pre'%' +1 hex_val +2 post
        IF DATATYPE( hex_val, 'X' ) & SPACE( hex_val, 0 ) <> '' THEN
            haystack = pre||X2C( hex_val )||post
        ELSE haystack = pre||hex_val||post
    END
/* 35 = #, 36 = $, 58 = :, 91 = [, 92 = \, 93 = ], 123 = {, 125 = } etc. */
    clean = '35 36 58 91 92 93 123 125 127'
    DO i = 1 TO WORDS( clean )
        needle = D2C( SUBWORD( clean, i, 1 ) )
        DO WHILE POS( needle, haystack ) > 0
            PARSE VALUE haystack WITH pre(needle)post
            haystack = pre||post
        END
    END
RETURN haystack

237
Programming / Re: JSon to Rexx (stem)
« on: October 24, 2013, 11:54:25 am »
Adjusted the function "parse_xml_tags" to handle a case when similar tag names where used.

Code: [Select]
parse_xml_tags: PROCEDURE /* xmlString, tag <<, tag_value>, selection> */
    prev_trace = TRACE( 'O' )
    PARSE UPPER ARG xmlString, tag, val, selection
    start_tag = '<'||tag
    INTERPRET "PARSE VALUE xmlString WITH pre'"||start_tag||val||"'extra'>'post"
    SELECT
        WHEN selection = 1 THEN /* tag */
        DO
            IF LENGTH( extra ) > 0 THEN
            DO
                PARSE VALUE SUBSTR( ARG(1), ABS( LENGTH( xmlString ) - LENGTH( post ) + 1 ) ) WITH pre'<'.
                RETURN pre
            END
        END
        WHEN selection = 2 THEN /* tag value */
            RETURN SUBSTR( ARG(1), ABS( LENGTH( xmlString ) - LENGTH( post ) - LENGTH( extra ) ), LENGTH( extra ) - ( RIGHT( extra, 1 ) = '/' ) )
        WHEN RIGHT( extra, 1 ) <> '/' THEN
        DO
            end_tag = '</'||tag||'>'
            next = LENGTH( xmlString ) - LENGTH( post ) + 1
            open_tag = next
            INTERPRET "PARSE VALUE post WITH pre'"||end_tag||"'post"
            close_tag = LENGTH( xmlString ) - LENGTH( post ) - LENGTH( end_tag ) + 1
            count = COUNTSTR( start_tag||'>', xmlString, open_tag, close_tag ) + COUNTSTR( start_tag||' ', xmlString, open_tag, close_tag )
            DO WHILE count > 0
                next = close_tag + LENGTH( end_tag )
                close_tag = POS( end_tag, xmlString, next )
                IF close_tag = 0 THEN
                    close_tag = LENGTH( xmlString )
                post = SUBSTR( xmlString, next, close_tag - next )
               
                INTERPRET "PARSE VALUE post WITH .'"||start_tag||"'extra'/>'post"
               
                DO WHILE LENGTH( post ) > 0
                    next = close_tag - LENGTH( post )
                    INTERPRET "PARSE VALUE post WITH .'"||start_tag||"'extra'/>'post"
                END
                count = COUNTSTR( start_tag||'>', xmlString, open_tag, close_tag ) + COUNTSTR( start_tag||' ', xmlString, open_tag, close_tag ) - 1
            END
            IF close_tag = 0 THEN close_tag = LENGTH( ARG(1) ) - open_tag
            ELSE close_tag = close_tag - open_tag
            RETURN SUBSTR( ARG(1), open_tag, MAX( 1, close_tag ) )
        END
        OTHERWISE NOP
    END
    CALL TRACE prev_trace
RETURN ''
   
COUNTSTR: PROCEDURE /* needle, haystack< <, startpos>, endpos> */
    IF ARG() < 2 THEN RETURN -1
    IF DATATYPE( ARG(3), 'W' ) THEN
        next = ARG(3)
    ELSE
        next = 1
    needle = ARG(1)
    haystack = ARG(2)
    IF DATATYPE( ARG(4), 'W' ) THEN
        haystack = SUBSTR( haystack, next, ABS( ARG(4) - next ) )
    next = 1
    count = 0
    DO WHILE next > 0
        next = POS( needle, haystack, next )
        IF next > 0 THEN DO
            next = next + LENGTH( needle )
            count = count + 1
        END
    END
RETURN count

//Jan-Erik

238
Programming / Re: mPlayer install script & add dereg of old avi codecs ???
« on: September 06, 2013, 02:02:10 pm »
Nice!
Please do post your code here Greggory.

I wouldn't mind if there where an Icon for program object. perhaps embedded within the script code?!

239
I moved the speakers to the front... and indeed the sound is louder than the whisper, though I still have to use max volume. Tweaking unimix settings as suggested didn't help though, just as I tried a few years ago.

240
ok... I use the defaults.

UniAud #189

Pages: 1 ... 14 15 [16] 17 18