home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Between Heaven & Hell 2
/
BetweenHeavenHell.cdr
/
300
/
294
/
diskidx.bas
< prev
next >
Wrap
BASIC Source File
|
1985-08-22
|
8KB
|
219 lines
2 '
4 '
6 'INDEX (ver. 3.20)
8 '
10 'by Alan Centa
12 ' 504 Ethan Allen Ave.
14 ' Takoma Park, MD 20912
26 '
28 '
30 '*************************** NOTICE ***************************
31 '* A limited license is granted to all users of this program, *
32 '* to make copies of this program and distribute them to other *
33 '* users, on the following conditions: *
34 '* 1. The notices contained in lines 2 through 50 of the *
35 '* program are not to be altered or removed. *
36 '* 2. The program is not to be distributed to others in *
37 '* modified form. *
38 '* 3. No fee is to be charged for copying or distributing *
39 '* the program without an express written agreement with *
40 '* the holder of the copyright. *
41 '* *
42 '* Copyright (c) 1983 Alan Centa *
43 '****************************************************************
44 '
45 '
46 '
47 '
48 '
49 '
100 KEY OFF: WIDTH 80: WIDTH "LPT1:",132: SCREEN 0,0,0,0: CLS
110 ' MENU for indexing program
120 FILE$="INDEX32" :FALSE=0 :TRUE=NOT FALSE :QT$=CHR$(34): DRIVE$="A"
130 DIM D$(80), AC$(1000), AD$(20)
140 ACCFLAG=0: ADSFLAG=0: NAD=1: NAC=0
150 '
160 ' SET UP FUNCTION KEYS TO NUMBERS
170 KEY 1,"": KEY 2,"": KEY 3,"": KEY 4,"": KEY 5,""
180 KEY 6,"": KEY 7,"": KEY 8,"": KEY 9,"": KEY 10,"": KEY OFF
190 '
200 CLS
210 COLOR 4:LOCATE 2,6:PRINT "US NEWS - Disk indexing program - VERSION 3.2"
220 COLOR 7:LOCATE 4,12:PRINT "INDEXING FUNCTIONS AVAILIBLE"
230 LOCATE 6,3:PRINT "UNSHIFTED": LOCATE 6,35: PRINT "SHIFTED"
240 LOCATE 7,3,0 :PRINT "1. INDEX NEW DISK"
250 LOCATE 7,35,0 :PRINT "1. TURN ACCUMULATION ";
260 IF ACCFLAG=0 THEN PRINT "OFF" ELSE PRINT "ON"
270 LOCATE 8,3,0 :PRINT "2. RETITLE DISK"
280 LOCATE 8,35,0 :PRINT "2. TURN AUTO DISPLAY ";
290 IF ADSFLAG=0 THEN PRINT "OFF" ELSE PRINT "ON"
300 LOCATE 9,3,0 :PRINT "3. PRINT CURRENT INDEX"
310 LOCATE 9,35,0 :PRINT "3. PRINT ACCUMULATED INDEX"
320 LOCATE 10,3,0:PRINT "4. SPACE PRINT"
330 LOCATE 10,35,0:PRINT "4. SPACE PRINT"
340 LOCATE 11,3,0:PRINT "5. EJECT PRINT"
350 LOCATE 11,35,0:PRINT "5. EJECT PRINT"
360 LOCATE 12,3,0:PRINT "6. SELECT DRIVE"
370 LOCATE 12,35,0:PRINT "6. CLEAR ACCUMULATION"
380 'LOCATE 13,3,0:PRINT "7. SAVE INDEX TO A DOS FILE"
390 'LOCATE 13,35,0:PRINT "7. SAVE ACCUMULATION"
400 LOCATE 17,3,0:PRINT "ESC KEY - EXIT TO SYSTEM"
410 '
420 POKE 106,0 :'CLEAR KYBD BUFFER
430 K$ = INKEY$:IF K$ <> "" THEN GOTO 420
440 K$ = INKEY$:IF K$ = "" THEN GOTO 440
450 ON ERROR GOTO 0 : 'WAS 520
460 A$=MID$(K$,1,1) :'PRINT A$,ASC(A$)
470 IF ASC(A$)=0 THEN GOSUB 1470
480 IF A$="1" THEN GOSUB 760: GOTO 200: 'INDEX DISK
490 IF A$="!" THEN ACCFLAG=NOT ACCFLAG: GOTO 200 ; 'ACCUM ON/OFF
500 IF A$="2" THEN GOSUB 1100: GOTO 200: 'RENAME
510 IF A$="@" THEN ADSFLAG=NOT ADSFLAG: GOSUB 1130 :GOTO 200: 'AUTO DISPLAY
520 IF A$="3" THEN GOSUB 1260 : GOTO 420: 'PRINT CURRENT
530 IF A$="#" THEN GOSUB 1590 : GOTO 200: 'PRINT ACCUMULATED
540 IF A$="4" THEN GOSUB 1380: GOTO 420: 'SPACE PRINTER
550 IF A$="$" THEN GOSUB 1380: GOTO 420: 'SPACE PRINTER
560 IF A$="5" THEN GOSUB 1420: GOTO 420: 'EJECT
570 IF A$="%" THEN GOSUB 1420: GOTO 420: 'EJECT
580 IF A$="6" THEN GOSUB 1450: GOSUB 760: GOTO 200: 'CHANGE DRIVE
590 IF A$="^" THEN GOSUB 1940 : GOTO 200: 'CLEAR ACCUMULATION
600 IF A$="7" THEN
610 IF A$="&" THEN
620 IF A$="8" THEN
630 IF A$="*" THEN
640 IF A$="9" THEN
650 IF A$="(" THEN
660 IF A$="0" THEN
670 IF A$=")" THEN
680 IF A$=CHR$(13)THEN LOCATE 20,3,0:PRINT" ": GOTO 420
690 IF A$= CHR$(27) THEN GOTO 740
700 BEEP: LOCATE 20,3,0:COLOR 22: PRINT " FUNCTION NOT AVAILIBLE"
710 COLOR 7: GOTO 420
720 BEEP: LOCATE 20,3,0:COLOR 20: PRINT " DRIVE NOT READY"
730 COLOR 7: RESUME 210
740 ON ERROR GOTO 0: CLS: CHAIN "MENU": END
750 '
760 'NEW DISKETTE INDEX
770 PRINT "Enter title of diskette:"
780 ON ERROR GOTO 720
790 CLS: FILES DRIVE$+":*.*" :PRINT:PRINT
800 ON ERROR GOTO 0
810 I=1: J=1: N=0: A$="":
820 WHILE SCREEN(I,J)<>0 AND J<78 AND SCREEN(I,J)<>32
830 WHILE SCREEN(I,J)<>0 AND SCREEN(I,J)<>32
840 FOR K=9 TO 11
850 A$=A$+CHR$(SCREEN(I,J+K))
860 NEXT K
870 FOR K=0 TO 7
880 A$=A$+CHR$(SCREEN(I,J+K))
890 NEXT K
900 IF ACCFLAG=0 THEN NAC=NAC+1:AC$(NAC)=A$+STR$(NAD)
910 N=N+1: D$(N)=A$: A$="": I=I+1
920 WEND
930 I=1: J=J+13: WEND
940 PRINT "ENTER DISKETTE NAME:"
950 C=0 :S=0
960 ' START OF SHELL METZNER SORT
970 M=N
980 M=INT(M/2) :IF M=0 THEN 1090
990 J=1 :K=N-M
1000 I=J
1010 L=I+M :C=C+1
1020 IF D$(I) <=D$(L) THEN 1060
1030 SWAP D$(I),D$(L)
1040 I=I-M
1050 IF I>0 THEN 1010
1060 J=J+1
1070 IF J>K THEN 980
1080 GOTO 1000
1090 '
1100 CLS:BEEP: INPUT "Enter title of diskette:",TITLE$: B$=" "
1110 NEWNAME=1: AD$(NAD)=TITLE$: NAD=NAD+1
1120 '
1130 IF ADSFLAG<>0 THEN RETURN
1140 'SHOW NAMES ON CURRENT DISK
1150 CLS: PRINT "Enter title of diskette:";TITLE$+" "+DATE$
1160 OLDEXT$=" ":J=0:A$=""
1170 FOR I=1 TO N
1180 IF J=INT(J/6)*6 THEN PRINT A$:A$=""
1190 IF MID$(D$(I),1,3)=OLDEXT$ THEN 1220
1200 OLDEXT$=MID$(D$(I),1,3):PRINT A$: PRINT
1210 PRINT "."+OLDEXT$+":": J=0: A$=""
1220 A$=A$+MID$(D$(I)+B$,4,12):J=J+1
1230 NEXT I: PRINT A$
1240 GOSUB 1520: RETURN
1250 '
1260 'PRINTING THE INDEX
1270 OLDEXT$=" ": LPRINT "Diskette: "+TITLE$+" "+DATE$
1280 LPRINT:J=0:A$=""
1290 FOR I=1 TO N
1300 IF J=INT(J/6)*6 THEN LPRINT A$:A$=""
1310 IF MID$(D$(I),1,3)=OLDEXT$ THEN 1340
1320 OLDEXT$=MID$(D$(I),1,3):LPRINT A$: LPRINT:PRINT
1330 LPRINT "."+OLDEXT$+":": J=0: A$=""
1340 A$=A$+MID$(D$(I)+B$,4,12):J=J+1
1350 NEXT I:LPRINT A$
1360 RETURN
1370 '
1380 'SPACE PRINTER
1390 LPRINT : RETURN
1400 '
1410 'EJECT PRINTER
1420 LPRINT CHR$(12);: RETURN
1430 '
1440 'CHANGE DRIVE
1450 INPUT "ENTER DRIVE LETTER-",DRIVE$:NEWNAME=0:RETURN
1460 '
1470 ' INTERPRET FUNCTION KEYS
1480 A=ASC(MID$(K$,2,1))
1490 IF A>58 AND A<69 THEN A$=MID$("1234567890",A-58,1)
1500 IF A>83 AND A<94 THEN A$=MID$("!@#$%^&*()",A-83,1)
1510 RETURN
1520 ' ANY KEY TO END
1530 LOCATE 25,1: PRINT "PRESS ANY KEY TO CONTINUE";
1540 POKE 106,0 :'CLEAR KYBD BUFFER
1550 K$ = INKEY$:IF K$ <> "" THEN GOTO 1520
1560 K$ = INKEY$:IF K$ = "" THEN GOTO 1560
1570 ON ERROR GOTO 0 : RETURN
1580 '
1590 'PRINTING ACCUMULATED DATA
1600 PRINT "ENTER ACCUMULATION NAME:";
1610 C=0 :S=0
1620 ' START OF SHELL METZNER SORT
1630 M=NAC
1640 M=INT(M/2) :IF M=0 THEN 1740
1650 J=1 :K=NAC-M
1660 I=J
1670 L=I+M :C=C+1
1680 IF AC$(I) <=AC$(L) THEN 1720
1690 SWAP AC$(I),AC$(L)
1700 I=I-M
1710 IF I>0 THEN 1670
1720 J=J+1
1730 IF J>K THEN 1640 ELSE 1660
1740 ' ---- END OF S/M SORT
1750 '
1760 'PRINTING THE INDEX
1770 INPUT " ",TITLE$
1780 'PRINT DISK NAMES
1790 OLDEXT$=" ": LPRINT TITLE$+" "+DATE$
1800 FOR I=1 TO NAD-1: LPRINT I,AD$(I): NEXT I
1810 FOR I=1 TO 5 : LPRINT: NEXT I
1820 '
1830 OLDEXT$=" ": LPRINT CHR$(12)+TITLE$+" "+DATE$
1840 LPRINT:J=0:A$="":B$=" "
1850 FOR I=1 TO NAC
1860 IF J=INT(J/6)*6 THEN LPRINT A$:A$=""
1870 IF MID$(AC$(I),1,3)=OLDEXT$ THEN 1900
1880 OLDEXT$=MID$(AC$(I),1,3):LPRINT A$: LPRINT:PRINT
1890 LPRINT "."+OLDEXT$+":": J=0: A$=""
1900 A$=A$+MID$(AC$(I)+B$,4,14):J=J+1
1910 NEXT I:LPRINT A$
1920 RETURN
1930 '
1940 ' CLEAR ACCUMULATION
1950 NAD=1: NAC=0: RETURN