Магнитные карты и ПК - Гёлль Патрик. Страница 17
Поскольку в 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}";
370 IF C$ = "00001" THEN PRINT "0";
380 IF C$ = "10000" THEN PRINT "1";
390 IF С$ = "01000" THEN PRINT "2";
400 IF C$ = "11001" THEN PRINT "3";
410 IF C$ = "00100" THEN PRINT "4";
420 IF C$ = "10101" THEN PRINT "5";
430 IF C$ = "01101" THEN PRINT "6";
440 IF C$ = "11100" THEN PRINT -7";
450 IF C$ = "00010" THEN PRINT "8";
460 IF C$ = "10011" THEN PRINT "9";
470 RETURN
480 REM (с) 1996 Patrick GUEULLE
Программа DEC7.BAS выполняет функцию, аналогичную выполняемой программой DEC5, но с алфавитно-цифровыми файлами, символы которых закодированы семью битами.
10 REM — DEC7.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