Выбрать главу

120 L=0: WHILE NOT EOF (1)

130 INPUT #1,M(L)

140 PRINT#2,M(L);: L=L+1

150 WEND

160 CLOSE #1

170 OPEN N$ FOR OUTPUT AS #1

180 FOR F=L-1 TO 0 STEP -1

190 PRINT M(F);

200 IF M(F)=1 THEN PRINT#1,"1";

210 IF M(F)=0 THEN PRINT#1,"0";

220 NEXT F: PRINT

230 END

240 REM COPYRIGHT (c)1997 Patrick GUEULLE

Ниже представлен результат, полученный с помощью файла-образца TEST5.CAR.

Программа преобразования в формат .CRD

Автор этой книги, естественно, не единственный в мире любитель магнитных карт, тем более что этот «вид спорта» особенно популярен в США. За океаном предпочтение отдают файлам формата .CRD,который отличается от .CAR отсутствием пробелов.

Поскольку в Internet можно встретить интересные программы, использующие формат .CRD, нам показалось полезным снабдить читателей служебной программой, способной сделать файлы .CAR совместимыми с ними. Речь идет о программе CARTOCRD.BAS.

В том виде, в котором она написана, эта небольшая программа может преобразовать файл CARTE.CAR, который был только что считан, в файл CARTE. CRD.

10 REM — CARTOCRD.BAS —

20 CLS: KEY OFF

30 PRINT "Преобразование файла CARTE.CAR в CARTE.CRD"

40 OPEN "carte.car" FOR INPUT AS #1

50 OPEN "carte.crd" FOR OUTPUT AS #2

60 IF EOF(1) THEN 110

70 INPUT #1,A

80 IF A=1 THEN PRINT#2,"1";

90 IF A=0 THEN PRINT#2,"0";

100 GOTO 60

110 PRINT "Выполнено": BEEP

120 END

130 REM (c) 1996 Patrick GUEULLE

Ниже показано, во что превращается файл TEST5.CAR, обработанный программой CARTOCRD.BAS (сначала его надо скопировать под именем CARTE .CAR).

Программа импорта файлов

Служебная программа CRDTOCAR.BAS осуществляет обратную операцию по отношению к предыдущей. Иначе говоря, выполняет преобразование файла CARTE.CRD в CARTE.CAR, совместимый со всеми нашими остальными программами.

10 REM — CRDTOCAR.BAS —

20 CLS: KEY OFF

30 PRINT "Преобразование файла CARTE.CRD в CARTE.CAR"

40 OPEN "carte.crd" FOR INPUT AS #1

50 OPEN "carte.car" FOR OUTPUT AS #2

60 IF EOF (1) THEN 110

70 A$=INPUT$ (1,#1)

80 IF A$="1" THEN PRINT#2,"1";: GOT0 60

90 IF A$="0" THEN PRINT#2,"0";: GOTO 60

10 °CLS: BEEP: PRINT "CARTE.CRD не соответствует формату CRD": END

110 PRINT "Выполнено": BEEP

120 END

130 REM (c) 1997 Patrick GUEULLE

Этим можно воспользоваться, чтобы извлечь пользу из файлов. CRD, полученных от пользователей, работающих, например, с программой CARDOMAT, очень высоко ценимой в США, которая, надо признаться, несколько подстегнула воображение автора…

Рекомендуется сначала скопировать исходный файл под именем CARTE.CRD, в то время как результат преобразования будет носить имя CARTE.CAR.

ДЕКОДИРОВАНИЕ ПЯТИБИТНЫХ СИМВОЛОВ

Иногда необходимо декодировать содержимое файла .CAR, когда нет карты, с которой он был считан. Это может быть файл, уже прочитанный при помощи LECT75 или LECT210, или файл, переписанный на дискету либо полученный по электронной почте другим любителем считывания с магнитных карт. Это может быть даже файл, предварительно «перевернутый» программой INVERT, если есть подозрение, что он был считан в обратном направлении.

Наши программы LECTISO не подходят для решения такой задачи по двум основным причинам. Во-первых, они созданы специально для управления операцией считывания в оболочке, а не для работы в автономном режиме. Во-вторых, каждая из них разработана для строго определенной дорожки ISO, а значит, рассчитана на определенное число битов.

Программа DEC5.BAS, со своей стороны, может взаимодействовать с любым файлом .CAR с пятиразрядным кодированием (а значит, цифровым) вне зависимости от его длины и дорожки, с которой он взят.

Познакомиться с работой DECS.BAS можно, предложив ей декодировать файл TEST5 .CAR, который есть на сайте www.dmk.ru.

10 REM — DEC5.BAS —

20 KEY OFF: CLS

30 PRINT "Имя декодируемого файла?";

40 INPUT N$: IF N$="" THEN END

50 FOR F=1 TO LEN(N$)

60 IF MID$(N$,F,1)="." THEN 90

70 NEXT F

80 N$=N$ +".CAR"

90 OPEN N$ FOR INPUT AS #1

100 L=INT(LOF(1)/2)-1

110 DIM T(LOF (1))

120 F=1:WHILE NOT EOF(1)

130 INPUT#1,T(F): F=F+1

140 WEND

150 J=1

160 IF T(J)<>1 THEN 220

170 IF T(J+1)<>1 THEN 220

180 IF T(J+2)<>0 THEN 220

190 IF T(J+3)<>1 THEN 220

200 IF T(J+4)<>0 THEN 220

210 K=J: GOTO 230

220 J=J+1: GOTO 160

230 C$=""

240 FOR F=0 TO 4

2S0 IF T(K+F) =0 THEN C$=C$+"0"

260 IF T(K+F) =1 THEN C$=C$+"1"

270 NEXT F

280 GOSUB 310

290 K=K+5: IF K>L-1 THEN END

300 GOTO 230

310 IF C$ = "11010" THEN PRINT "{Start}"

320 IF C$ = "10110" THEN PRINT " {sep}"

330 IF C$ = "11111" THEN PRINT "{end}"

340 IF C$ = "01011" THEN PRINT "{10}";

350 IF C$ = "00111" THEN PRINT "{12}";

360 IF C$ = "01110" THEN PRINT "{14}";