home *** CD-ROM | disk | FTP | other *** search
- 10 ' 123RANGE.BAS List Lotus Range Names used in a spreadsheet file (.wks)20 '
- 30 ' Charles H. Greene dba ISM April 23, 1983
- 40 ' 150 West First Street
- 50 ' New Richmond, Wi 54017 <715> 246-6690
- 60 '
- 70 ' Lotus v1.0 does not provide for listing Range Names that have been
- 80 ' assigned..this program provides a modest solution to that problem.
- 90 '
- 100 DEFINT A-Z
- 150 DIM LOTUS.CTL$(10)
- 200 BLACK=0: WHITE=7: BRIGHT=16: FG=WHITE: BG=BLACK
- 210 FALSE=0: TRUE=NOT FALSE
- 220 END.OF.FILE=FALSE
- 230 FF$=CHR$(12)
- 500 X=0: Y=0: Z=0
- 510 X$=""
- 520 LOTUS.CTL$(1)=CHR$(0) 'characters seperating range names
- 530 LOTUS.CTL$(2)=CHR$(11) 'Range Name fields begin with the 1st
- 540 LOTUS.CTL$(3)=CHR$(0) ' sequence of characters (2)-(5)
- 550 LOTUS.CTL$(4)=CHR$(24) 'any break in this sequence ends
- 560 LOTUS.CTL$(5)=CHR$(0) ' the range names
- 5000 '
- 5010 ' Load table of column codes
- 5020 '
- 5030 DIM COL$(256)
- 5040 FOR X = 0 TO 255
- 5050 READ COL$(X)
- 5060 NEXT
- 5500 '
- 5510 ' Print Headings
- 5520 '
- 5530 PRINT
- 5540 KEY OFF: CLS: LOCATE ,,0
- 5550 PRINT "List Lotus(tm) Range Names "DATE$" "LEFT$(TIME$,5)" 123RANGE <ISM>"
- 5560 PRINT
- 5570 PRINT "Press Ctrl PrtSc keys to send output to printer...."
- 5580 SOUND 32767,50:SOUND 32767,1
- 5590 '
- 5600 PRINT FF$"List Lotus(tm) Range Names "DATE$" "LEFT$(TIME$,5)" 123RANGE <ISM>"
- 5610 PRINT
- 6000 '
- 6010 ' Get Lotus filespec
- 6020 '
- 6030 ON ERROR GOTO 15000
- 6040 PRINT "Enter LOTUS spreadsheet filespec : ";
- 6050 INPUT "",FILE$
- 6060 Z=INSTR(FILE$,".") 'make sure it has .wks extension
- 6070 IF Z=0 THEN FILE$=FILE$+".WKS"
- 6080 OPEN FILE$ AS #1 LEN=1
- 6090 FIELD #1,1 AS X$
- 6100 FCB=VARPTR(#1) 'address FCB
- 6110 Z=PEEK(FCB) 'file type must be random
- 6120 IF Z<>4 THEN CLOSE #1: GOTO 6000
- 6130 K1!=PEEK(FCB+19)*256
- 6131 K2!=K1!*256
- 6132 K3!=PEEK(FCB+17)
- 6134 K4!=256*PEEK(FCB+18)
- 6136 RCDLIMIT!=K1!+K2!+K3!+K4!
- 6140 IF RCDLIMIT!=0 THEN CLOSE #1: PRINT: PRINT "**** File not found ****": GOTO 6000
- 6150 PRINT: PRINT: PRINT "File contains "RCDLIMIT!"bytes.": PRINT: PRINT
- 6160 GOSUB 7500 'get byte
- 6170 FLD.CNT=1: RANGE.NAME$=""
- 6180 WHILE NOT END.OF.FILE
- 6190 ON MATCH.CNT+1 GOSUB 10000, 10100, 10200, 10300, 10400
- 6200 GOSUB 7500
- 6990 WEND
- 7000 '
- 7010 ' End of Input
- 7020 '
- 7030 PRINT: PRINT: PRINT "< END OF LIST >"
- 7040 END 'done
- 7050 PRINT " < "FILE$" End of Range Name List >"
- 7500 '
- 7510 ' Read file
- 7520 '
- 7530 RCDNO!=RCDNO!+1 'set next random record(byte) no.
- 7540 'check for end of file
- 7550 IF RCDNO!>RCDLIMIT! THEN END.OF.FILE=TRUE: X$="": GOTO 7590
- 7560 GET #1,RCDNO!
- 7590 RETURN
- 10000 '
- 10010 ' Look for start of range names 0Bh 00h 18h 00h
- 10020 '
- 10030 IF X$<>CHR$(11) THEN MATCH.CNT = 0:RETURN
- 10040 MATCH.CNT=1
- 10090 RETURN
- 10100 '
- 10110 IF X$<>CHR$(0) THEN MATCH.CNT = 0: GOTO 10000
- 10120 MATCH.CNT=2
- 10190 RETURN
- 10200 '
- 10210 IF X$<>CHR$(24) THEN MATCH.CNT = 0: GOTO 10000
- 10220 MATCH.CNT=3
- 10290 RETURN
- 10300 '
- 10310 IF X$<>CHR$(0) THEN MATCH.CNT = 0: GOTO 10000
- 10320 MATCH.CNT=4
- 10390 RETURN
- 10400 '
- 10410 ' Range name fields found
- 10420 '
- 10430 IF FLD.CNT > 15 GOTO 10500
- 10440 IF X$<>CHR$(0) THEN RANGE.NAME$=RANGE.NAME$+X$
- 10450 FLD.CNT=FLD.CNT+1
- 10490 RETURN
- 10500 IF FLD.CNT > 17 GOTO 10600
- 10510 IF FLD.CNT = 17 THEN RANGE.BEG.COL=ASC(X$)
- 10520 FLD.CNT=FLD.CNT+1
- 10590 RETURN
- 10600 IF FLD.CNT > 19 GOTO 10700
- 10610 IF FLD.CNT = 18 THEN RANGE.BEG.ROW=ASC(X$) ELSE RANGE.BEG.ROW=(RANGE.BEG.ROW * 256)+ASC(X$)
- 10620 FLD.CNT=FLD.CNT+1
- 10690 RETURN
- 10700 IF FLD.CNT > 21 GOTO 10800
- 10710 IF FLD.CNT = 21 THEN RANGE.END.COL=ASC(X$)
- 10720 FLD.CNT=FLD.CNT+1
- 10790 RETURN
- 10800 IF FLD.CNT > 23 GOTO 10900
- 10810 IF FLD.CNT = 22 THEN RANGE.END.ROW=ASC(X$): FLD.CNT=FLD.CNT+1: RETURN
- 10820 RANGE.END.ROW=(RANGE.END.ROW*256)+ASC(X$)
- 10840 PRINT USING "\ \";RANGE.NAME$;
- 10850 RANGE.BEG$=COL$(RANGE.BEG.COL)+MID$(STR$(RANGE.BEG.ROW+1),2)
- 10860 RANGE.END$=COL$(RANGE.END.COL)+MID$(STR$(RANGE.END.ROW+1),2)
- 10870 PRINT " "RANGE.BEG$".."RANGE.END$"
- 10880 FLD.CNT=FLD.CNT+1: RANGE.NAME$=""
- 10890 RETURN
- 10900 IF X$<>LOTUS.CTL$(FLD.CNT-23) THEN END.OF.FILE=TRUE
- 10910 IF FLD.CNT < 28 THEN FLD.CNT=FLD.CNT+1 ELSE FLD.CNT=1
- 10990 RETURN
- 15000 '
- 15010 ' Error traps
- 15020 '
- 15030 IF ERR=57 THEN PRINT: PRINT "**** I/O Error ****": END
- 15040 IF ERR<24 OR ERR>25 GOTO 15100
- 15050 IF ERL <> 6070 GOTO 15200
- 15060 IF ERL <> 7560 GOTO 15300
- 15070 PRINT:PRINT "**** Check disk drive -- press any key to continue ****"
- 15080 CHAR$=INKEY$: IF CHAR$="" THEN 15070 ELSE RESUME
- 15100 ' Disk file open errors
- 15190 GOTO 15900
- 15200 ' Disk I/O errors
- 15210 IF ERR=62 OR ERR=63 THEN END.OF.FILE=TRUE: X$="": RESUME 7590
- 15290 GOTO 15900
- 15300 '
- 15900 PRINT "ERROR #"ERR" IN LINE "ERL
- 15910 ON ERROR GOTO 0
- 60000 '
- 60010 ' Col Subscript
- 60020 '
- 60030 DATA A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
- 60040 DATA AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ
- 60050 DATA BA,BB,BC,BD,BE,BF,BG,BH,BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,BY,BZ
- 60060 DATA CA,CB,CC,CD,CE,CF,CG,CH,CI,CJ,CK,CL,CM,CN,CO,CP,CQ,CR,CS,CT,CU,CV,CW,CX,CY,CZ
- 60070 DATA DA,DB,DC,DD,DE,DF,DG,DH,DI,DJ,DK,DL,DM,DN,DO,DP,DQ,DR,DS,DT,DU,DV,DW,DX,DY,DZ
- 60080 DATA EA,EB,EC,ED,EE,EF,EG,EH,EI,EJ,EK,EL,EM,EN,EO,EP,EQ,ER,ES,ET,EU,EV,EW,EX,EY,EZ
- 60090 DATA FA,FB,FC,FD,FE,FF,FG,FH,FI,FJ,FK,FL,FM,FN,FO,FP,FQ,FR,FS,FT,FU,FV,FW,FX,FY,FZ
- 60100 DATA GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK,GL,GM,GN,GO,GP,GQ,GR,GS,GT,GU,GV,GW,GX,GY,GZ
- 60110 DATA HA,HB,HC,HD,HE,HF,HG,HH,HI,HJ,HK,HL,HM,HN,HO,HP,HQ,HR,HS,HT,HU,HV,HW,HX,HY,HZ
- 60120 DATA IA,IB,IC,ID,IE,IF,IG,IH,II,IJ,IK,IL,IM,IN,IO,IP,IQ,IR,IS,IT,IU,IV