1000 DIM NAM$(15),FIL$(15),ERA$(15),REN$(31),PRU$(18),ZAL$(8),DAT$(20000)
1010 ZAL$(8,8)="*"
1020 GRAPHICS 0:POKE 752,1:POKE 82,2
1030 POKE 53774,64:POKE 16,64
1040 SETCOLOR 2,0,0:SETCOLOR 1,0,14
1050 GOSUB 2020
1060 OPEN #1,4,0,"K:"
1070 ? "}      Happy-Computer"
1080 ? "        AMPEL v2.0"
1090 ? "  (p) 1987 Henrik Fisch"
1100 ? "Neues oder altes Programm?[N/A] ";
1110 GET #1,NEU:IF NEU<>78 AND NEU<>65 THEN 1110
1120 ? CHR$(NEU)
1130 ? "Cassette oder Diskette   ?[C/D] ";
1140 GET #1,MAS:IF MAS<67 OR MAS>68 THEN 1140
1150 ? CHR$(MAS):IF MAS=67 THEN 1170
1160 ? "Programmname    ";:INPUT NAM$:IF NAM$="" THEN ? "";:GOTO 1160
1170 TRAP 1180:? "Programmlaenge    ";:INPUT BYT:GOTO 1190
1180 ? "";:GOTO 1170
1190 ? "Alle Angaben korrekt     ?[J/N] ";
1200 GET #1,I:IF I<>74 AND I<>78 THEN 1200
1210 POSITION 0,5:? "";
1220 IF I=78 THEN 1100
1230 IF MAS=67 THEN FIL$="C:":GOTO 1270
1240 IF NAM$(2,2)=":" THEN ERA$=NAM$(1,2):FIL$=NAM$:GOTO 1270
1250 IF NAM$(3,3)=":" THEN ERA$=NAM$(1,3):FIL$=NAM$:GOTO 1270
1260 FIL$(1,2)="D:":FIL$(3)=NAM$:ERA$="D:"
1270 ERA$(LEN(ERA$)+1)="BACKUP.OBJ":REN$=FIL$:REN$(LEN(REN$)+1)=",":REN$(LEN(REN$)+1)="BACKUP.OBJ"
1280 POI=1:IF NEU=78 THEN 1370
1290 TRAP 1300:GOTO 1330
1300 IF MAS=67 THEN 1360
1310 IF PEEK(195)=136 THEN 1360
1320 CLOSE #2:GOTO 1070
1330 OPEN #2,4,128,FIL$
1340 GET #2,I:DAT$(POI,POI)=CHR$(I)
1350 POI=POI+1:GOTO 1340
1360 CLOSE #2
1370 COLOR 14:PLOT 3,5:DRAWTO 36,5
1380 COLOR 2:PLOT 36,6:DRAWTO 36,21
1390 COLOR 13:PLOT 36,22:DRAWTO 2,22
1400 COLOR 22:PLOT 2,21:DRAWTO 2,5
1410 COLOR 14:PLOT 2,5
1420 POKE 82,3:POKE 752,0
1430 POSITION 3,6:LIN=6
1440 IF POI-1>=BYT THEN 1950
1450 POI=INT(POI/8)*8+1
1460 NUM=POI-1
1470 H1=INT(NUM/4096)
1480 H2=INT(NUM/256)-H1*16
1490 H3=INT(NUM/16)-H1*256-H2*16
1500 H4=NUM-INT(NUM/16)*16
1510 H1=H1+48+7*(H1>9)
1520 H2=H2+48+7*(H2>9)
1530 H3=H3+48+7*(H3>9)
1540 H4=H4+48+7*(H4>9)
1550 ? CHR$(H1);CHR$(H2);CHR$(H3);CHR$(H4);":";:ZEI=0
1560 GET #1,TAS
1570 IF TAS=17 THEN QUI=1:GOTO 1840
1580 IF TAS=19 THEN QUI=0:GOTO 1840
1590 IF TAS=126 THEN 1670
1600 IF TAS>64 AND TAS<71 THEN 1620
1610 IF TAS<48 OR TAS>57 THEN 1560
1620 ZEI=ZEI+1:? CHR$(TAS);:PRU$(ZEI,ZEI)=CHR$(TAS)
1630 IF ZEI=18 THEN ? ">";:GOTO 1710
1640 IF ZEI/2=INT(ZEI/2) THEN ? " ";
1650 IF ZEI=16 THEN ? "<";
1660 GOTO 1560
1670 IF ZEI=0 THEN 1560
1680 IF ZEI=16 THEN ? "~";
1690 IF ZEI/2=INT(ZEI/2) THEN ? "~";
1700 ? "~";:ZEI=ZEI-1:GOTO 1560
1710 IF LIN<21 THEN LIN=LIN+1:? :GOTO 1730
1720 A=USR(1536):POSITION 3,21:? "                                 "
1730 I=USR(1591,NUM,ADR(ZAL$),ADR(PRU$))
1740 IF I THEN 1810
1750 SETCOLOR 2,3,14
1760 SOUND 1,255,10,15:SOUND 0,253,10,15
1770 FOR J=1 TO 100:NEXT J
1780 SETCOLOR 2,0,0
1790 SOUND 0,0,0,0:SOUND 1,0,0,0
1800 GOTO 1460
1810 DAT$(POI)=ZAL$:POI=POI+8
1820 IF POI-1<BYT THEN 1460
1830 QUI=1
1840 IF MAS=67 THEN 1870
1850 TRAP 1860:XIO 33,#2,0,0,ERA$
1860 TRAP 1870:XIO 32,#2,0,0,REN$
1870 TRAP 1960:OPEN #2,8,128,FIL$
1880 SAV=POI-1:IF POI>BYT THEN SAV=BYT
1890 IF MAS=67 THEN 1910
1900 ? #2;DAT$(1,SAV);:GOTO 1930
1910 FOR I=1 TO SAV:? #2;DAT$(I,I);
1920 NEXT I
1930 CLOSE #2
1940 IF  NOT QUI THEN 1560
1950 POKE 82,2:GRAPHICS 0:END 
1960 HOR=PEEK(85):VER=PEEK(84)
1970 CLOSE #2
1980 POSITION 9,23:? "Fehler #  ";PEEK(195);" [RETURN]";
1990 GET #1,I:IF I<>155 THEN 1990
2000 POSITION 9,23:? "                             ";
2010 POSITION HOR,VER:? " ";:GOTO 1840
2020 ? "Bitte warten"
2030 RESTORE 
2040 I=1536:J=0
2050 READ C:IF C>255 THEN 2070
2060 POKE I,C:I=I+1:J=J+C:GOTO 2050
2070 IF J=7858 THEN 2090
2080 GOTO 2140
2090 J=0
2100 READ C:IF C>255 THEN 2120
2110 POKE I,C:I=I+1:J=J+C:GOTO 2100
2120 IF J=12542 THEN RETURN 
2130 POKE 82,2:GRAPHICS 0
2140 ? "Fehler in DATA-Zeilen!"
2150 END 
2160 DATA 104,165,88,24,105,242,133
2170 DATA 212,165,89,105,0,133,213
2180 DATA 162,15,165,212,24,105,40
2190 DATA 133,214,165,213,105,0,133
2200 DATA 215,160,33,177,214,145,212
2210 DATA 136,208,249,202,240,13,165
2220 DATA 212,24,105,40,133,212,144
2230 DATA 222,230,213,176,218,96
2240 DATA 7858
2250 DATA 104,104,133,213,104,133,212
2260 DATA 104,133,215,104,133,214,104
2270 DATA 133,217,104,133,216,160,0
2280 DATA 32,121,6,145,214,200,192
2290 DATA 8,208,246,32,121,6,133
2300 DATA 219,165,213,10,101,212,160
2310 DATA 0,10,113,214,200,192,8
2320 DATA 208,248,162,0,197,219,208
2330 DATA 2,162,1,134,212,162,0
2340 DATA 134,213,96,32,136,6,10
2350 DATA 10,10,10,133,218,32,136
2360 DATA 6,5,218,96,162,0,161
2370 DATA 216,56,233,48,201,10,144
2380 DATA 2,233,7,230,216,208,2
2390 DATA 230,217,96
2400 DATA 12542
