10 PRINT
: PRINT "PIP - VER 5.01 7May2010"
20 "Start
21 CLEAR 0
: X = FRE(0) - 1500
: IF (X < 0) THEN
CLEAR 600
ELSE
IF (X > 32000) THEN
CLEAR 32000
ELSE
CLEAR X
30 DIM T2(15)
: FOR (Y = 0) TO 15
: T2(Y) = -1
: NEXT Y
: PRINT "*";
: LINE INPUT B$
40 IF (B$ = "") THEN
CLEAR 200
: END 'End Program
50 IF (LEN(B$) > 3) THEN
C$ = RIGHT$(B$, LEN(B$) - 3)
ELSE
C$ = B$
60 B$ = LEFT$(B$, 3)
70 IF (B$ = "DAT") THEN GOTO 680
80 IF (B$ = "COP") THEN GOTO 870
90 IF (B$ = "LIS") THEN GOTO 800
100 IF (B$ = "CNV") THEN GOTO 1040
110 IF (B$ = "DIR") THEN
F = -1
: GOTO 270
120 IF (B$ = "SRT") THEN
F = 0
: DIM A$(255)
: GOTO 270
130 IF (B$ <>"INI") THEN
PRINT "ERR"
: GOTO 20 'Start program again
140 'INI
141 GOSUB 760
150 A$ = STRING$(137, 0)
: MID$(A$, 136, 1) = CHR$(255)
160 FOR (T = 6) TO 76
170 FOR (S = 0) TO 31
180 MID$(A$, 1, 2) = CHR$(T) + CHR$((S * 17) AND 31)
190 GOSUB 600
: DSKO$ A$, S
200 NEXT S, T
210 T = 70
: GOSUB 600 'DIRECTORY TRACK
220 A$ = CHR$(70) + CHR$(0) + CHR$(0) + CHR$(128) + CHR$(127) + CHR$(0)
230 A$ = A$ + CHR$(0) + CHR$(255) + STRING$(127, 0) + CHR$(255)
240 DSKO$ A$, 0
250 PRINT
: PRINT "DONE"
260 GOTO 20 'Start program again
270 'DIR (F = -1) or SRT (F = 0)
271 GOSUB 760
: T = 70
: GOSUB 600
290 PRINT
300 PRINT "DIRECTORY DISK"; A
310 PRINT
: I = 0
320 FOR (S = 0) TO 31
330 A$ = DSKI$(17 * S AND 31)
340 A$ = LEFT$(A$, 135)
350 A$ = RIGHT$(A$, 128)
360 FOR (T = 0) TO 7
370 B$ = LEFT$(A$, (T + 1) * 16)
380 B$ = RIGHT$(B$, 16)
390 N$ = LEFT$(B$, 8)
400 B$ = RIGHT$(B$, 8)
410 X = ASC(B$)
: B$ = RIGHT$(B$, 7)
: Y = ASC(B$)
420 B$ = RIGHT$(B$, 6)
: Z = ASC(B$)
430 IF (ASC(N$) = 0) THEN GOTO 470
440 IF (ASC(N$) = 255) GOTO THEN 490
450 R$ = "S"
: IF (Z <> 2) THEN R$ = "R"
460 IF (F) THEN
PRINT N$; " "; R$; " "; X; " "; Y
ELSE
A$(I) = N$ + " " + R$ + " " + STR$(X) + "
" + STR$(Y)
: I = I + 1
470 NEXT T
480 NEXT S
490 IF ((F0 OR (I = 0)) THEN
PRINT
: GOTO 20 'Start program again
500 IF (I = 1) THEN GOTO 560
510 SW = 0
520 FOR (J = 0) TO (I - 2)
530 IF (A$(J) > A$(J + 1)) THEN
SWAP A$(J), A$(J + 1)
: SW = -1
540 NEXT J
550 IF (SW) THEN GOTO 510
560 FOR (J = 0) TO (I - 1)
570 PRINT A$(J)
580 NEXT J
590 PRINT
: GOTO 20 'Start program again
600 IF (T2(A) <> - 1) THEN GOTO 640
610 IF ((INP(8) AND 64)) = 0) THEN
T2(A) = 0
: GOTO 640
620 WAIT 8, 2, 2
: OUT 9, 2
630 GOTO 610
640 IF (T2(A) = T) THEN
RETURN
650 D = 1
: IF (T2(A) >T) THEN D = 2
660 WAIT 8, 2 , 2
: OUT 9, D
: T2(A) = T2(A) - 2 * (D - 1.5)
670 GOTO 640
680 'DAT
681 INPUT "TRACK"; T
: IF (T < 0) THEN
GOTO 20
ELSE
INPUT "SECTOR"; S
690 GOSUB 760
: GOSUB 600
700 A$ = DSKI$(S)
: FOR (I = 0) TO (LEN(A$) - 1)
710 T1$ = OCT$(ASC(RIGHT$(A$, LEN(A$) - I)))
720 T2$ = LEFT$(" 000", 5 - LEN(T1$)) + T1$
: PRINT T2$;
730 IF ((I MOD 8) = 7) THEN PRINT
740 NEXT I
: PRINT
750 GOTO 680
760 A = VAL(C$)
770 IF ((A<0) OR (A>15)) THEN
PRINT "ERR"
: GOTO 20 'Start program again
780 OUT 8, 128
: OUT 8, A
790 RETURN
800 'LIS
801 GOSUB 760
810 C$ = RIGHT$(C$, LEN(C$) - 1 + (A>9))
: IF (ASC(C$) <> &O54) THEN
PRINT "ERR"
: GOTO 20 'Start program again
820 C$ = RIGHT$(C$, (LEN(C$) - 1))
830 OPEN "I", 1, C$, A
840 IF EOF(1) THEN
CLOSE 1
: OTO 20 'Start program again
850 LINEINPUT #1, A$
860 PRINT A$
: GOTO 840
870 'COP
871 GOSUB 760
: B = A
880 C$ = RIGHT$(C$, LEN(C$) - 1 + (A > 9))
: IF (ASC(C$) <> &O54) THEN
PRINT "ERR"
: GOTO 20 'Start program again
890 C$ = RIGHT$(C$, LEN(C$) - 1)
: GOSUB 760
: C = A
900 PRINT "FROM "; B; " TO "; C;
910 INPUT A$
: IF (ASC(A$) <> ASC("Y")) THEN GOTO 20
920 FOR (T=0) TO 76
930 OUT 8, 128
: OUT 8, C
940 A = C
: GOSUB 600
: OUT 8, 128
: OUT 8, B
: A = B
: GOSUB 600
950 FOR (S=0) TO 31
960 OUT 8,128
: OUT 8, B
: B$=DSKI$(S)
970 F$ = DSKI$(S)
: IF (F$ <> B$) THEN
PRINT "REREAD"
: GOTO 960
980 OUT 8, 128
: OUT 8, C
990 DSKO$ B$, S
: C$ = DSKI$(S)
: IF (C$ <> B$) THEN
PRINT "REWRITE"
: GOTO 950
1000 NEXT S
1010 NEXT T
1020 PRINT "DONE"
1030 GOTO 20 'Start program again
1040 'CNV
1041 GOSUB 760 'ENABLE DISK
1050 FOR (T = 6) TO 76
1060 GOSUB 600 'POSITION TO TRACK T
1070 FOR (S = 0) TO 31
1080 A$ = DSKI$(S)
: IF (ASC(MID$(A$, 3, 1)) <> 0) THEN GOTO 1120
1090 IF MID$(A$, 136, 1) = CHR$(255) THEN GOTO 1120
1100 MID$(A$, 136, 1) = CHR$(255)
1110 DSKO$ A$, S
1120 NEXT S
1130 NEXT T
: GOTO 20 'Start program again