-------------------------------------------------------------------------------- 'anti_screen_saver.vbs: Do something to your workstation so screen saver won't kick 'in. Useful if you can't control your screen saver. Adjust sleep time as needed. Set WshShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 500 while true WshShell.sendkeys "%" WScript.Sleep 60000 wend -------------------------------------------------------------------------------- inputfile"; exit(1); } $fr_enc = $argv[1]; #e.g. UTF-8, UTF-16, ISO-8859-1, GB2312, BIG5, UCS4 $to_enc = $argv[2]; #If have access to *nix, type `iconv -l'. $infile = file($argv[3]); #Warning: This slurps the whole file into $infile! #$out = fopen("outputfile.txt", "w"); foreach ($infile as $line) { #fputs($out, iconv($fr_enc, $to_enc, $line)); echo iconv($fr_enc, $to_enc, $line); } ?> -------------------------------------------------------------------------------- #!/usr/bin/perl -w #hexip.pl: IP addresses are sometimes displayed in hexadecimal form as in #/proc/net/tcp on Linux: #$ cat /proc/net/tcp | awk '{print $1, $2, $3}' #sl local_address rem_address #... #18: 1F6F6F0A:05F1 344C6F0A:A10D #19: 1F6F6F0A:05F1 344C6F0A:A10F #or SharePlex file names: #0x0a069364+PI+orcl+sp_mport+0x0a06446e # #You can convert the addresses 1F6F6F0A or 0x0a06446e into more meaningful IPs: #Usage: hexip.pl #(you can omit leading 0x or 0x0) #hexip.pl also does reverse DNS lookup for your convenience #IMPORTANT: For little endian machines, modify the unpack line. See below. #Yong Huang 2006,2008 if (defined $ARGV[0] && $ARGV[0] !~ /-h/i) { $in = $ARGV[0]; } else { warn "Usage: $0 Example: $0 0x0a069364\n"; exit 1; } $in =~ s/^0x//; chomp $in; $in = "0".$in if length("$in") == 7; #$in has 8 hex digits and can be expanded to 4 unsigned char values for 4 octets #of the IP. Join them with "." (ASCII46). $decip = join(chr(46), unpack("CCCC",pack("H8","$in"))); #If you obtain the IP address from a little endian machine, comment out the line above and uncomment the line below: #$decip = join(chr(46), reverse(unpack("CCCC",pack("H8","$in")))); print "$decip\n"; #nslookup could be in different locations and the name line has different format. #Replace "/usr/bin/grep -i" with "findstr /i" on Windows. system "nslookup $decip | /usr/bin/grep -i name"; -------------------------------------------------------------------------------- #!/usr/bin/perl -w #hexstr.pl: Passing hex strings like #'00000000 0000213C 20616770 70616568' #(quotes included) and you get # !< agp paeh #Use " instead of ' on Windows @_ = split //, $ARGV[0]; foreach (@_) { if ($_ eq " ") { print; } else { if (defined $hex) { $hex .= $_; print sprintf("%c", hex $hex); undef $hex; } else { $hex .= $_; } } } print "\n"; -------------------------------------------------------------------------------- #!/usr/bin/perl -w #conntest.pl: Tests basic TCP connection, unique in that if local host has #multiple IPs, this program designates a specific IP (and a port) to make a #connection to a remote host. Useful in testing connections interfered by a #firewall in the middle. Note: 1. Use local IP, not hostname; 2. Better check #local host for usage of localIP:localport combination by existing process #first with netstat. #Usage: ./conntest.pl #If this box has Tim::HiRes or Time::HR (see documentation for usage) #use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep clock_gettime # clock_getres clock_nanosleep clock stat ); use Socket; ($remote, $port, $localIP, $localport) = @ARGV; $iaddr = inet_aton($remote) or die "No host: $remote"; $paddr = sockaddr_in($port, $iaddr); $proto = getprotobyname("tcp"); socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die "socket: $!"; #The important piece: a client program calls bind()! bind(SOCK, sockaddr_in($localport, inet_aton($localIP))) or die "bind: $!"; $start = time; connect(SOCK, $paddr) or die "connect: $!"; print while ; #Comment out if testing Oracle SQL*Net connection close SOCK or die "close: $!"; $end = time; print $end - $start; exit; -------------------------------------------------------------------------------- #!perl -w #httpdall.pl: Runs in Apache/conf directory, recursively outputs all lines in #httpd.conf and its include'd conf files into httpdall.txt. File inclusion info #is shown in stdout. This is particularly useful for Apache in Oracle 9iAS or #AS10g, where the included oracle_apache.conf includes many other conf files. #On Windows, perl.exe in Oracle AS is at %OH%\perl\5.6.1\bin\MSWin32-x86. use strict; open HTTPD, "httpd.conf" or die "Can't open httpd.conf for read: $!"; open OUT, "> httpdall.txt" or die "Can't open httpdall.txt for write: $!"; while () { print OUT; if (/^\s*include\s+(.*)/i) { my $inclfile = $1; $inclfile =~ s/"//g; print "httpd.conf includes ", $inclfile, "\n"; &include($inclfile); } } close OUT; close HTTPD; sub include { my $inpfile = shift; #included file is passed in as input here my $INCFILE; open $INCFILE, $inpfile or die "Can't open $inpfile: $!"; while (<$INCFILE>) { print OUT; if (/^\s*include\s+(.*)/i) { my $inclfile = $1; $inclfile =~ s/"//g; print "$inpfile includes ", $inclfile, "\n"; &include($inclfile); } } close $INCFILE; } -------------------------------------------------------------------------------- #!/usr/bin/perl -w #recinc.pl: Recursive Include, recursively outputs names of included files in #an include file and its include'd files... Let's say you want to know where #error numbers are really defined on Linux. /usr/include/errno.h points to #bits/errno.h, which points to linux/errno.h, which finally points to #asm/errno.h. recinc.pl shows the chain clearly. Note that conditional compile #directives are ignored; e.g., regardless you defined _KERNEL or not, recinc.pl #on Solaris says sys/procfs.h include's sys/types.h. #Usage example: cd /usr/include; path/recinc.pl procfs.h use strict; my %including; $including{$ARGV[0]} = 1; #including includes included my $ldsp = 0; #number of leading spaces open ARG, $ARGV[0] or die "Can't open $ARGV[0] for read: $!"; while () { if (/^\s*#\s*include\s+<(.*)>/) { my $inclfile = $1; print "$ARGV[0] includes ", $inclfile, "\n"; &include($inclfile); } } close ARG; sub include { my $inpfile = shift; #included file is passed in as input here my $INCFILE; my $in = 0; #whether included file is in the including hash ++$ldsp; open $INCFILE, $inpfile or die "Can't open $inpfile: $!"; while (<$INCFILE>) { if (/^\s*#\s*include\s+<(.*)>/) { my $inclfile = $1; $including{$inpfile} = 1; print " " x $ldsp, "$inpfile includes ", $inclfile, "\n"; foreach (keys %including) { if ($_ eq $inclfile) { $in = 1; last; } } &include($inclfile) if $in == 0; } } close $INCFILE; --$ldsp; } -------------------------------------------------------------------------------- 'AbnormlPrio.vbs: Identifies Windows processes running at non-normal priority. 'Examples are Network Associates's VirusScan programs mcshield.exe and 'possibly SCAN32.EXE running at high priority. You can use Sysinternals's 'Process Explorer (procexp) to lower it (Task Manager can't). Wscript.echo _ "*** Processes running at higher priority than 8 include the pseudo ***" & vbCrLf & _ "*** Idle Process, and legitimate processes e.g. smss.exe, Winlogon.exe, ***" & vbCrLf & _ "*** Services.exe, Lsass.exe. But others should not show up (unless ***" & vbCrLf & _ "*** their priority is lower than 8). ***" & vbCrLf strComputer = "." Set objWMIService = GetObject("winmgmts:" & _ "{impersonationLevel=Impersonate}!\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_Process") For Each objItem in colItems if objItem.Priority <> 8 then Wscript.Echo objItem.Name & " runs at priority " & objItem.Priority 'The line below only works on XP and higher. Without cmdline, it may be hard to 'identify the program. Use NT/2K resource kit tlist or procexp instead. wscript.echo " Cmdline: " & objItem.CommandLine end if Next 'This block can tell you who owns the process 'For Each i in colItems ' colProperties = i.GetOwner(strNameOfUser,strUserDomain) ' Wscript.Echo i & " is owned by " & strUserDomain & "\" & strNameOfUser & "." 'Next -------------------------------------------------------------------------------- 'LowerPriority.vbs: Programmatically lower process priorities 'For SetPriority Method of the Win32_Process and other priorities, see 'http://msdn.microsoft.com/en-us/library/aa393587(VS.85).aspx Const BELOW_NORMAL = 16384 'Const LOW = 64 strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colProcesses = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name='mcshield.exe' or Name='SCAN32.EXE'") For Each objProcess in colProcesses objProcess.SetPriority(BELOW_NORMAL) Next -------------------------------------------------------------------------------- @echo off rem Windows which: 'which _prog_' tells you from where _prog_ is launched. rem Save this file as which.bat in a directory visible in %PATH% such as c:\winnt echo IMPORTANT: Remember to include filename extention: 'which perl.exe' is correct; echo 'which perl' is wrong, because a directory named perl may be found first. If echo you don't know the extension, try %pathext% in that order. echo. echo fullname: %~$PATH:1 -------------------------------------------------------------------------------- @echo off rem unfold: reverse of fold, a UNIX command that wraps lines, but fold.exe is also available. rem Suppose you previously ran "fold -s DocWithNoLineWraps > DocWithLineWraps", rem you can restore by "unfold.bat DocWithLineWraps > DocWithNoLineWraps" rem (This one-liner doesn't work well.) perl -we "undef $/; while(<>){s/\n\n/$&\n/g; s/\n(?!\n)//g;print}" %1 rem The command below can also be run standalone, on any OS. perl -we "$lle=1; while(<>){ if (/^$/) {print; print \"\n\" if $lle==0; $lle=1;} else {chomp; print; print ' ' unless / $/; $lle=0;}}" %1 rem On UNIX/Linux, use this instead rem perl -we '$lle=1; while(<>){ if (/^$/) {print; print "\n" if $lle==0; $lle=1;} else {chomp; print; print " " unless / $/; $lle=0;}}' $1 -------------------------------------------------------------------------------- #!perl -w #Chinese (or any Unicode) documents may have problems wrapping in Windows2000 #word processors, Notepad, Wordpad or Word; line wrapping could occur in the #middle of a 2-byte unicode character. This Perl script forces lines to wraps at #the 80th column. You can use any even (not odd) number. #Usage: $0 inputfile > outputfile undef $/; #in order to slurp whole document (stdin <>) as one line @a = split //, <>; #each character of <> is one member of @a $j = 0; #column position on each line for ($i = 0; $i < scalar @a; $i++, $j++) { print $a[$i]; #a character of the document if ($j % 80 == 0) #wraps after the 80th column; any even number will do { print "\n"; $j = 0; } elsif (ord $a[$i] == 10) { $j = 0; #ASCII code of this char is CR } } /* Its C version is listed here. Plug this function into html2txt.c a few scripts below. Usage: thisprog inputfile outputfile */ void fold(FILE *, FILE *); void fold(FILE *infile, FILE *outfile) { int c, i=0; while ((c=getc(infile))!=EOF) { putc(c, outfile); if (++i==80) { putc('\n', outfile); i=0; } if (c==10) i=0; } } -------------------------------------------------------------------------------- #!/usr/bin/expect #Check to see if the Web site is up by sending the HTTP command HEAD to #port 80 of the Web server. Exit status is captured by a wrapper shell #script, which explains what happens spawn /usr/bin/telnet www.stormloader.com 80 expect_before eof { exit 1 } ;#basic network connection fails expect -re "Trying *$" set timeout 30 ;#give more time for initial connection expect "Connected to www.stormloader.com." expect "Escape character is '^]'." send "HEAD /index.htm HTTP/1.0\r\r" set timeout 30 expect "HTTP/1.\[10] 200 OK" { exit 0 } ;#good exit 2 ;#can't connect to Web site in 30 sec } #other methods we can try if the above script won't work # #lynx -head -dump http://yoursite.com/ #echo $? # # #package require http #set token [::http::geturl dev.scriptics.com -validate 1] #if {[regexp -nocase {ok} [::http::code $token]]} { # puts "Scriptics is active" #} else { puts "Scriptics down: [::http::code $token]" #} #::http::cleanup $token -------------------------------------------------------------------------------- #!/usr/bin/perl -w #paircheck.pl: checks symbol pairing in program code. #All it does is count the number of brackets, or "/*" vs. "*/", or any #symbol you define. It does not tell you where unpaired brackets are. #Watch out for regexp in your file as in "/a*/" and I/O redirection as in #"ls >ls_result" which give unequal counts of /*, */ and <, >. The < and > #counts are particularly useful for HTML code. Add more checks if you wish. use vars qw($opt_h); use Getopt::Std; getopts('b:c:e:h'); if ($#ARGV==-1 or defined $opt_h) #h: help { print 'Usage: paircheck.pl [-c comment_char][-bBEGIN][-eEND][-h] your_file E.g., "paircheck.pl -c# myscript" checks bracket pairing excluding comments which start with #. "-c #" is also OK. "-bBEGIN", "-eEND" options start and end bracket checking on the line containing "BEGIN" and "END", respectively. Checking in a file with multiple "BEGIN"s and "END"s starts at the last "BEGIN" and ends at the first "END". "-c# -c//" works like "-c//", probably not what you want. '; exit; } $lbracecnt = $rbracecnt = 0; $lparencnt = $rparencnt = 0; $lbracketcnt = $rbracketcnt = 0; $lcommentcnt = $rcommentcnt = 0; $langlecnt = $ranglecnt = 0; while (<>) { if (defined $opt_c) { next if /^$opt_c/; #Not required but it speeds up execution. s/$opt_c.*//; } if (defined $opt_b and /$opt_b/) { $lbracecnt = $rbracecnt = 0; $lparencnt = $rparencnt = 0; $lbracketcnt = $rbracketcnt = 0; $lcommentcnt = $rcommentcnt = 0; $langlecnt = $ranglecnt = 0; } if (defined $opt_e and /$opt_e/) { last; } $lbracecnt += tr/{//; $rbracecnt += tr/}//; $lparencnt += tr/(//; $rparencnt += tr/)//; #$lcommentcnt += tr[/\*][]; #tr doesn't work here $lcommentcnt += s[/\*][/\*]; #$rcommentcnt += tr[\*/][]; #and here $rcommentcnt += s[\*/][\*/]; $lbracketcnt += tr/[//; $rbracketcnt += tr/]//; $langlecnt += tr///; } print "Symbol\tOccurrencies\n"; print " {\t ", $lbracecnt, "\n"; print " }\t ", $rbracecnt, "\n"; print " (\t ", $lparencnt, "\n"; print " )\t ", $rparencnt, "\n"; print " /*\t ", $lcommentcnt, "\n"; print " */\t ", $rcommentcnt, "\n"; print " [\t ", $lbracketcnt, "\n"; print " ]\t ", $rbracketcnt, "\n"; print " <\t ", $langlecnt, "\n"; print " >\t ", $ranglecnt, "\n"; -------------------------------------------------------------------------------- #!perl -w #imgbrowse.pl: creates a directory image browser. #If you need to view all the images in your Web browser cache #directory on one screen, use this script to create an HTML file #and open that file with your browser. Run this script in the #browser cache directory with standard output redirected to, say, #result.html. opendir IMG, "." or die "Can't open current DIR: $!"; @allimg=readdir IMG; close IMG; print "\n"; foreach (@allimg) { print ""; } print "\n"; -------------------------------------------------------------------------------- /*html2txt.c: removes HTML tags to make a HTML file pure ASCII text.*/ #include #include void html2txt(FILE *, FILE *); main(int argc, char *argv[]) { FILE *ifile, *ofile; if (argc!=3) {printf("Usage: thisprog infile outfile.\n"); exit(1); } if ((ifile=fopen(argv[1],"r"))==NULL) {printf("%s%s%s\n", "Can't open ", argv[1], " for input."); exit(1); } if ((ofile=fopen(argv[2],"w"))==NULL) {printf("%s%s%s\n", "Can't open ", argv[2], " for output."); exit(1); } html2txt(ifile, ofile); fclose(ifile); fclose(ofile); } void html2txt(FILE *infile, FILE *outfile) { int c, intags=0; while ((c=getc(infile))!=EOF) { if (c!='<' && intags==0) putc(c, outfile); else {intags=1; if (c=='>') intags=0; } } } -------------------------------------------------------------------------------- /* charge.c. Calculation of collective deviation from zero charge at each atom. Hopefully this reflects the extent of electronic delocalization. The delocalization DL = SQRT(Sum of (AtomicCharge)^2), where the the AtomicCharge is (electron density-valence at each atom). */ #include #include main() {double AtCh[30]={0}, sum=0; int i=0, NAtom; printf("Input MOPAC atomic charges:\n"); do {scanf("%lf", &AtCh[i]); /* AtCh = atomic charge */ }while (AtCh[i++]>-5); /* Enter -5 or a more negative number to stop input. */ printf("Input number of atoms of the molecule:\n"); scanf("%d", &NAtom); for (i=0; i<30, AtCh[i]>-5; ++i) {/*AtCh[i] = 1 - AtCh[i];*/ AtCh[i] = AtCh[i]*AtCh[i]; sum = sum + AtCh[i]; } printf("Atomic charge deviation (delocalization) is: %f\n", sqrt(sum)); printf("Size-modified atomic charge deviation is: %f\n", sqrt(sum/NAtom)); } -------------------------------------------------------------------------------- 01 'UV.BAS: GPIB Remote Control Program for 8840A Fluke Multimeter (or any 02 'scientific instrument after minor modification). Being used to 03 'generate real-time data acquisition curve of HPLC. Written in GWBASIC. 04 'Requires BIB.M and National Instruments GPIB package. 20 CLS 30 CLEAR ,60000! : IBINIT1=60000! : IBINIT2=IBINIT1+3 : BLOAD "bib.m",IBINIT1 40 CALL IBINIT1(IBFIND,IBTRG,IBCLR,IBPCT,IBSIC,IBLOC,IBPPC,IBBNA,IBONL,IBRSC,IBSRE,IBRSV,IBPAD,IBSAD,IBIST,IBDMA,IBEOS,IBTMO,IBEOT,IBRDF,IBWRTF,IBTRAP) 50 CALL IBINIT2(IBGTS,IBCAC,IBWAIT,IBPOKE,IBWRT,IBWRTA,IBCMD,IBCMDA,IBRD,IBRDA,IBSTOP,IBRPP,IBRSP,IBDIAG,IBXTRC,IBRDI,IBWRTI,IBRDIA,IBWRTIA,IBSTA%,IBERR%,IBCNT%) 61 DEV$="DEV3" 'default address of 8840A 62 CALL IBFIND(DEV$,Fluke%) 63 TMO%=12 65 CALL IBTMO(Fluke%,TMO%) 70 CLS 80 PRINT " GPIB Remote Control Program for 8840A Fluke Multimeter " 90 PRINT "(^C when get stuck or want to interrupt and type SYSTEM)":PRINT 100 KEY OFF 110 VIEW PRINT 22 TO 24 120 COLOR 14 140 LOOP=1 180 IF Fluke% < 0 THEN GOTO 1080 200 WHILE LOOP 215 LOCATE 24,1 220 LINE INPUT "Enter Option Q (query), C (command), L (local), E (exit), D (address): ",CMD$ 240 IF CMD$ = "e" OR CMD$ = "E" THEN LOOP = 0: GOTO 350 280 IF CMD$ = "l" OR CMD$ = "L" THEN GOSUB 380: GOTO 340 290 IF CMD$ = "q" OR CMD$ = "Q" THEN GOSUB 800: GOTO 340 300 IF CMD$ = "c" OR CMD$ = "C" THEN GOSUB 970: GOTO 340 317 IF CMD$ = "d" OR CMD$ = "D" THEN GOSUB 3000: GOTO 340 320 IF CMD$ = "" THEN GOTO 1110 330 CALL IBWRT(Fluke%,CMD$): GOSUB 490 340 WEND 350 ' REM CALL IBSIC(Fluke%): V%=0: CALL IBSRE(Fluke%,V%) 360 CALL IBLOC(Fluke%) 'REM CALL IBSIC(Fluke%) 370 SYSTEM 380 ' 390 'SUBROUTINE LOCAL_MODE 400 ' 420 'PRINT" LOCAL OPERATION OF 8840A IS ENABLED UNTIL NEW OPTION IS ENTERED" 430 CALL IBLOC(Fluke%) 440 RETURN 450 ' 800 'SUBROUTINE QUERY 810 ' 820 COLOR 12 824 SCREEN 0 'back to TEXT screen mode for graphic mode 826 CLS 830 LINE INPUT "Enter Query (RETURN to download): ",CMD$ 833 IF CMD$="" THEN CMD$="*TRG;VAL?" 'Trigger & value-query to 8840A 835 INPUT "Acquire data for ... (minutes)? ", DAQTIME 836 DAQTIME=DAQTIME*60 'DAQTIME in sec. 837 LINE INPUT "Output to file ... ? ", DataFile$ 840 IF RIGHT$(DataFile$,4) = ".TXT" OR RIGHT$(DataFile$,4) = ".txt" GOTO 850 842 DataFile$ = DataFile$ + ".TXT" 'force .TXT file extension for GRAMS 850 OPEN DataFile$ FOR append AS #1 'APPEND not OUTPUT to avoid unwanted overwriting 860 CALL IBWRT(Fluke%,CMD$) 870 REPLY$=SPACE$(13) 882 SCREEN 8 'graphic mode (640 X 200) 884 VIEW SCREEN (90,10)-(610,190) 886 FOR I = 3 TO 23 STEP 4 888 LOCATE I,10 : PRINT 11.5-I/2 'scale numbers on Y axis 890 NEXT I 'no scale numbers for X because DAQTIME is a variable 893 LINE (100,180)-(600,180),1 : LINE (100,20)-(100,180),1 'axes 897 COLOR 5 898 FOR I=1 TO 9 'tick marks on axes 899 LINE (95,20+16*I)-(100,20+16*I),1 '16=(180-20)/10 900 LINE (100+50*I,180)-(100+50*I,185),1 '50=(600-100)/10 902 NEXT I 903 CNT=0 'the number of the data point in real time 904 CALL IBRD(Fluke%,REPLY$) 'For some reason 1st data is bad; dont save it 905 CALL IBRD(Fluke%,REPLY$) : PRINT#1,REPLY$; 'This data is separate from 906 START!=TIMER 'line 910 data in loop because of initial DAQ delay. 908 CNT=CNT+1 'The important loop begins. 910 CALL IBRD(Fluke%,REPLY$) 920 PRINT#1,REPLY$; 926 'IF IBSTA% > 0 THEN GOTO 910 928 FINISH!=TIMER 930 FS=FINISH!-START! 931 Y=180-VAL(REPLY$)/10*160 '10 VOLT FOR MAX. Y; 160=180-20 932 X=100+FS/DAQTIME*500 '500=600-100 933 PSET(X,Y),2 934 IF FS < DAQTIME GOTO 908 938 ' 940 CLOSE#1 950 RETURN 960 ' 970 'SUBROUTINE COMMAND 980 ' 990 COLOR 11 1000 LINE INPUT "Enter Command: ",CMD$ 1020 CALL IBWRT(Fluke%,CMD$) 1040 RETURN 1050 ' 1060 'ERROR HANDLER 1070 ' 1080 PRINT "IBFIND ERROR": GOTO 110 1090 PRINT "GPIB ERROR -- IBERR : ";IBERR%;"IBSTA : ";HEX$(IBSTA%): GOTO 110 1100 END 1110 CLS 1115 PRINT" 1120 PRINT" INSTRUCTIONS FOR FLUKE 8840A GPIB REMOTE PROGRAM" 1125 PRINT" 1210 PRINT"C = COMMAND Is any GPIB command listed in the Fluke manual." 1220 PRINT" But generally they're SCPI compliant." 1230 PRINT"Q = QUERY. " 1260 PRINT"L = LOCAL. This command will return local control to the Fluke until a new" 1265 PRINT" command is entered." 1270 PRINT"E = EXIT. Will return you to DOS (or Windows if you run from Windows)." 1290 PRINT:LINE INPUT" Press ENTER to return to Main Menu.",X$ 1300 CLS 1310 GOTO 120 3000 'REM CHANGE DEVICE ADDRESS 3005 CALL IBLOC(Fluke%) 'REM PUT OLD DEVICE BACK TO LOCAL BEFORE ADDRESS CHANGE 3010 LINE INPUT "Enter New Device Address Number (Example DEV3, the default) : ",DEV$ 3015 IF DEV$ ="" GOTO 61 3020 CALL IBFIND(DEV$,Fluke%) 3025 IF Fluke% < 0 THEN COLOR 12:PRINT" ILLEGAL DEVICE ! TRY AGAIN" ELSE 3030 3027 GOTO 3010 3030 RETURN