home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib24b.dsk
/
DISK.VOLUME.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
5KB
|
121 lines
10 REM **********************
20 REM * DISK.VOLUME *
30 REM * BY JAMES PATRIDGE *
40 REM * COPYRIGHT (C) 1985 *
50 REM * BY MICROSPARC, INC *
60 REM * CONCORD, MA 01742 *
70 REM **********************
80 CLEAR : RESTORE : TEXT : HOME
90 TB = 12:D$ = CHR$(4)
100 N1$ = "000000000111":N2$ = "123456789012"
110 D1$ = "<< CATALOG DISK VOLUME PATCHER >>"
120 PRINT TAB( 20 -( LEN(D1$)/2))D1$:D1$ = ""
130 PRINT
140 FOR I = 0 TO 39: PRINT "%";: NEXT I
150 POKE 34,3: PRINT
160 REM :
170 REM : PRINT INSTRUCTIONS
180 REM :
190 PRINT "THIS PROGRAM WILL CUSTOMIZE THE DISK": PRINT "VOLUME MESSAGE USED BY THE CATALOG": PRINT "COMMAND.": PRINT
200 PRINT "YOU CAN EASILY CHANGE THE 'DISK VOLUME'": PRINT "TEXT TO ANY MESSAGE 12 CHARACTERS OR": PRINT "LESS IN LENGTH.": PRINT
210 PRINT "MESSAGES CAN BE MADE TO BE MULTI-LINED": PRINT "BY INSERTING A < CRTL-J > CHARACTER": PRINT "INTO THE MESSAGE STRING.": PRINT
220 VTAB 19: FOR I = 0 TO 39: PRINT "%";: NEXT I: VTAB 22
230 HTAB 5: PRINT "PRESS ANY KEY TO CONTINUE => ";: GET A$
240 HOME : POKE 34,0
250 VTAB 6: CALL -958
260 D1$ = "ENTER MESSAGE"
270 HTAB 13: VTAB 6: PRINT D1$: VTAB 20: FOR J = 0 TO 39: PRINT "%";: NEXT J: VTAB 22: PRINT "FREE BYTES = "TB
280 VTAB 8: INVERSE : HTAB 13: PRINT N1$: VTAB 9: HTAB 13: PRINT N2$: NORMAL
290 VTAB 10: CALL -868: HTAB 1
300 PRINT " ==>";: INPUT " ";CS$
310 IF CS$ = "" THEN CS$ = "DISK VOLUME "
320 TB = TB - LEN(CS$)
330 IF LEN(CS$) >12 THEN PRINT : PRINT "MAXIMUM MESSAGE LENGTH 12 CHARACTERS ": CALL -1052: FOR J = 1 TO 2000: NEXT J:CS$ = "":TB = 12: GOTO 250
340 VTAB 6: CALL -958: PRINT "YOUR NEW MESSAGE : "
350 VTAB 10: PRINT CS$
360 PRINT : PRINT "TOTAL BYTES USED => "12 -TB
370 VTAB 20: FOR I = 0 TO 39: PRINT "%";: NEXT I
380 PRINT : INPUT "MESSAGE IS CORRECT (YES/NO) => ";AN$
390 IF LEFT$(AN$,1) < >"Y" THEN TB = 12: GOTO 250
400 REM :
410 REM : SET OFFSET VALUES FOR
420 REM : VARIOUS DISPLAY MODES
430 REM :
440 VTAB 22: CALL -958: PRINT "MESSAGE DISPLAYED :": INPUT "<N> NORMAL <F> FLASH <I>INVERSE =>";N$
450 IF N$ = "N" THEN X = 128: GOTO 490
460 IF N$ = "F" THEN X = 0: GOTO 490
470 IF N$ = "I" THEN X = -64: GOTO 490
480 GOTO 440
490 VTAB 22: CALL -958: FLASH : PRINT "REPLACING": NORMAL
500 REM :
510 REM : POKE MESSAGE LENGTH
520 REM :
530 POKE 44463, LEN(CS$) -1
540 REM :
550 REM : SKIP VOLUME NUMBER
560 REM :
570 REM :
580 POKE 44481,47: POKE 44482,174
590 REM :
600 REM : ARRANGE MESSAGE IN
610 REM : REVERSE ORDER.
620 REM :
630 FOR I = LEN(CS$) TO 1 STEP -1
640 M$ = M$ +( MID$ (CS$,I,1))
650 NEXT I
660 REM :
670 REM : POKE NEW TABLE INTO
680 REM : MEMORY AND
690 REM : ADJUST ASCII VALUES
700 REM : FOR DISPLAY MODE
710 REM : SELECTED.
720 REM :
730 REM : SEE APPLE REFERENCE
740 REM : MANUAL (P.14-15)
750 REM :
760 FOR I = 1 TO LEN(M$)
770 BV = ASC( MID$ (M$,I,1))
780 IF BV <27 AND X = 128 THEN GOTO 820
790 IF BV <27 AND X = 0 THEN BV = BV +128
800 IF BV <27 AND X = -64 THEN BV = BV +192
810 IF BV <64 THEN BV = BV +64
820 POKE 45998 +I,BV +X
830 NEXT I
840 VTAB 22: CALL -868: PRINT : INPUT "SAVE CHANGES AS A TEXT FILE (Y/N) =>";AN$
850 IF LEFT$(AN$,1) = "Y" THEN GOSUB 890
860 VTAB 22: CALL -958: PRINT "THE DEED IS DONE !"
870 ONERR GOTO 1200
880 PRINT D$;"RUN DOS.DESIGNER"
890 HOME : VTAB 3: PRINT "<< CREATE A COMMAND CHANGE TEXT FILE >>"
900 PRINT : FOR I = 0 TO 39: PRINT "%";: NEXT I
910 VTAB 10: INPUT "ENTER FILE NAME => ";NA$: CALL -958
920 IF NA$ = "" THEN CALL -1052: PRINT "ILLEGAL FILE NAME !": GOTO 910
930 IF LEN(NA$) >30 OR ASC( LEFT$(NA$,1)) <65 OR ASC( LEFT$(NA$,1)) >90 THEN CALL -1052: PRINT "ILLEGAL FILE NAME !": GOTO 910
940 VTAB 12: INPUT "ENTER STARTING LINE # => ";SL$: CALL -958
950 SL = VAL(SL$)
960 IF SL <1 OR SL >63999 THEN CALL -1052: PRINT "ILLEGAL LINE NUMBER !": GOTO 940
970 VTAB 10: CALL -958: INVERSE : PRINT "CURRENT PARAMETERS : ": NORMAL
980 PRINT : PRINT "TEXT FILE NAME => ";NA$: PRINT : PRINT "STARTING LINE NUMBER => ";SL
990 PRINT : INPUT "VERIFY PARAMETERS (Y/N) => ";A$
1000 IF LEFT$(A$,1) < >"Y" THEN GOTO 890
1010 PRINT D$;"MON C,I,O"
1020 PRINT D$;"OPEN"NA$
1030 PRINT D$;"DELETE"NA$
1040 PRINT D$;"OPEN"NA$
1050 PRINT D$;"WRITE"NA$
1060 FOR SA = 45998 TO 45998 + LEN(M$)
1070 C = C +1
1080 IF C = 10 THEN C = 1
1090 IF C < >1 THEN 1130
1100 PRINT
1110 PRINT SL;
1120 SL = SL +1
1130 PRINT " POKE ";SA;", "; PEEK(SA);" :";
1140 NEXT SA
1150 PRINT "POKE 44463,"; PEEK(44463);":";"POKE 44481,"; PEEK(44481);":";"POKE 44482,"; PEEK(44482)
1160 PRINT
1170 PRINT D$;"CLOSE"NA$
1180 PRINT D$;"NOMONC,I,O": VTAB PEEK(37): CALL -868
1190 RETURN
1200 IF PEEK(222) = 6 THEN HOME : VTAB 12: PRINT "INSERT DOS.DESIGNER DISK AND PRESS A KEY":WAIK -16384,128: POKE -16368,0: GOTO 880
1210 HOME : VTAB 12: PRINT "ERROR #"; PEEK(222);" IN LINE "; PEEK(218) + PEEK(219) *256