Патрик Гёлль - Магнитные карты и ПК
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
150 J=1
160 IF T(J)<>1 THEN 240
170 IF T(J+1)<>0 THEN 240
180 IF T(J+2)<>1 THEN 240
190 IF T(J+3)<>0 THEN 240
200 IF T(J+4)<>0 THEN 240
210 IF T(J+5)<>0 THEN 240
220 IF T(J+6)<>1 THEN 240
230 K=J: GOTO 250
240 J=J+1: GOTO 160
250 C$=""
260 FOR F=0 TO 6
270 IF T(K+F)=0 THEN C$=C$+"0"
280 IF T(K+F)=1 THEN C$=C$+"1"
290 NEXT F
300 GOSUB 330
310 K=K+7: IF K>L-1 THEN END
320 GOTO 250
330 IF C$="1010001" THEN PRINT "{start}"
340 IF C$="0111110" THEN PRINT "{sep}"
350 IF C$="1111100" THEN PRINT "{end}"
360 IF C$="0000001" THEN PRINT " ";
370 IF C$="1000000" THEN PRINT "{1H}";
380 IF C$="0100000" THEN PRINT "{2H}";
390 IF C$="1100001" THEN PRINT "{3H}";
400 IF C$="0010000" THEN PRINT "{4H}";
410 IF C$="0110001" THEN PRINT "{6H}";
420 IF C$="1110000" THEN PRINT "{7H}";
430 IF C$="0001000" THEN PRINT "{8H}";
440 IF C$="1001001" THEN PRINT "{9H}";
450 IF C$="0101001" THEN PRINT "{AH}";
460 IF C$="1101000" THEN PRINT "{BH}";
470 IF C$="0011001" THEN PRINT "{CH}";
480 IF C$="1011000" THEN PRINT "{DH}";
490 IF C$="0111000" THEN PRINT "{EH}";
500 IF C$="1111001" THEN PRINT "{FH}";
510 IF C$="0000100" THEN PRINT "0";
520 IF C$="1000101" THEN PRINT "1";
530 IF C$="0100101" THEN PRINT "2";
540 IF C$="1100100" THEN PRINT "3";
550 IF C$="0010101" THEN PRINT "4";
560 IF C$="1010100" THEN PRINT "5";
570 IF C$="0110100" THEN PRINT "6";
580 IF C$="1110101" THEN PRINT "7";
590 IF C$="0001101" THEN PRINT "8";
600 IF C$="1001100" THEN PRINT "9";
610 IF C$="0101100“ THEN PRINT "{1AH}";
620 IF C$="1101101" THEN PRINT "{1BH}";
630 IF C$="0011100" THEN PRINT "{1CH}";
640 IF C$="1011101" THEN PRINT "{1DH}";
650 IF C$="0111101" THEN PRINT "{1EH}";
660 IF С$="1000011" THEN PRINT "A";
670 IF C$="0100011" THEN PRINT "В";
680 IF C$="1100010" THEN PRINT "C";
690 IF C$="0010011" THEN PRINT "D";
700 IF С$="1010010" THEN PRINT "E";
710 IF C$="0110010" THEN PRINT "F";
720 IF C$="1110011" THEN PRINT "G";
730 IF C$="0001011" THEN PRINT "H";
740 IF C$="1001010" THEN PRINT "I";
750 IF C$="0101010" THEN PRINT "J";
760 IF C$="1101011" THEN PRINT "K";
770 IF C$="0011010" THEN PRINT "L";
780 IF C$="1011011" THEN PRINT "M";
790 IF C$="0111011" THEN PRINT "N";
800 IF C$="1111010" THEN PRINT "O";
810 IF C$="0000111" THEN PRINT "P";
820 IF C$="1000110" THEN PRINT "Q";
830 IF C$="0100110" THEN PRINT "R";
840 IF C$="1100111" THEN PRINT "S";
850 IF C$="0010110" THEN PRINT "T";
860 IF C$="1010111" THEN PRINT "U";
870 IF C$="0110111" THEN PRINT "V";
880 IF C$="1110110" THEN PRINT "W";
890 IF C$="0001110' THEN PRINT "X";
900 IF C$="1001111" THEN PRINT "Y";
910 IF C$="0101111" THEN PRINT "Z";
920 IF C$="1101110'' THEN PRINT "{3BH}";
930 IF C$="0011111" THEN PRINT "{3DH}";
940 IF C$="1011110" THEN PRINT "{3EH}"
950 IF C$="1111111" THEN PRINT "{40H}";
960 RETURN
970 REM (c) 1996 Patrick GUEULLE
КОНТРОЛЬ ЧЕТНОСТИ
Время от времени приходится сталкиваться с файлом .CAR, который после считывания карты не мог быть декодирован надлежащим образом с помощью программ LECTISO.