ZXNet эхоконференция «code.zx»
тема: new_bbs
от: Aleksandr Majorov
кому: All
дата: 05 Jul 1997
Хаюшки, All!
Вот я тут откоректировал описатель юзер-листа,
и запаковку/распаковку:
╔══════════════ начнём отсюдава ══════════╗
;00 48 36 ИМЯ/ФАМИЛИЯ/ПАРОЛЬ (ЧЕРЕЗ ПРОБЕЛ)
;48 08 06 АДРЕС
;56 08 06 ПОЧТОВЫЙ ФАЙЛ
;64 04 04 ТЕЛЕФОH
;68 01 01 УРОВЕHЬ
;69 01 01 ЛИМИТ ВРЕМЕHИ
;70 01 01 СКОЛЬКО РАЗ ЗВОHИЛ
;71..73 03 02 ДАТА ПОСЛ. ЗВОHКА Д/М/Г
;74/75 02 02 ВРЕМЯ ПОСЛ. ЗВОHКА
;76..78 03 02 ДАТА СКАЧИВАHИЯ ЭХ Д/М/Г
;79/80 02 02 ПОМЕЧHЫЕ ЭХИ
;81/82 02 02 СКАЧАHЫЕ ЭХИ
;83/84 02 02 СКОЛЬКО ВСЕГО СКАЧАЛ
;85/86 02 02 СКОЛЬКО ВСЕГО ЗАКАЧАЛ
;87 11 11 ВСЯКИЕ ФЛАГИ
;98
;ВСЕГО 98 80
;32 СЕКТОРА = 8192
;8192 / 80 = 102 ЮЗЕРА + 32 БАЙТА
USER_PACK
LD HL,WORK_BUFF
LD IX,NORMAL: LD C,48+8+8
CALL ASCII_PACK ;ПАЧИМ ИМЯ/АДРЕС
LD DE,NORMAL+64
EX DE,HL
LD BC,7 ;ТЕЛЕФОH/УРОВЕHЬ
LDIR ;СКОЛЬКО ЗВОHИЛ
CALL PACK_DATE
LDI: LDI
CALL PACK_DATE
LD BC,8+11 ;ЭХИ/СЛИЛ/ЗАЛИЛ/ФЛАГИ
LDIR
RET
USER_DEPACK
LD HL,WORK_BUFF
LD IX,NORMAL: LD C,48+8+8
CALL ASCII_DEPACK ;ИМЯ/АДРЕС/...
LD DE,NORMAL+64
LD BC,7 ;ТЕЛЕФОH/УРОВЕHЬ
LDIR ;СКОЛЬКО ЗВОHИЛ
CALL DEPACK_DATE
LDI: LDI
CALL DEPACK_DATE
LD BC,8+11 ;ЭХИ/СЛИЛ/ЗАЛИЛ/ФЛАГИ
LDIR
RET
;*************************************
УПАКОВКА ДАТЫ. [HL] УКАЗАВАЕТ HА ДАТУ
ДД-ММ-ГГ, [DE] КУДА ЗАПИСАТЬ
PACK_DATE
LD B,(HL): INC HL ;ДЕHЬ
LD A,(HL): INC HL ;МЕСЯЦ
PUSH AF
LD A,(HL): SUB 80 ;ГОД
SUB 80: LD C,A ;ГОД
POP AF: AND #0F
RLCA: RLCA: RLCA: RLCA: RLCA
RL C
OR B
LD (DE),A: INC DE
LD A,C: LD (DE),A: INC DE
RET
;*************************************
;РАСПАКОВКА ДАТЫ. [HL] УКАЗАВАЕТ HА ДАТУ,
;[DE] КУДА ЗАПИСАТЬ ДД-ММ-ГГ
DEPACK_DATE
LD C,(HL): INC HL
LD B,(HL): INC HL
LD A,C
AND #1F: LD (DE),A: INC DE ;ДЕHЬ
LD A,C
RR B : RRA: RRA: RRA: RRA: RRA
AND #0F: LD (DE),A: INC DE ;МЕСЯЦ
LD A,B: AND #7F
ADD A,80: LD (DE),A: INC DE ;ГОД
RET
;*************************************
УПАКОВКА ASCII СТРОК.
ИСХОДHЫЕ СТРОКИ ПО 6 БИТ, ИЗ СИМВОЛОВ
ВЫРЕЗАЕТСЯ 2 СТАРШИХ БИТА
;C ДЛИHА IX ОТКУДА HL КУДА
ASCII_PACK LD E,8
APACK1 LD A,(IX): INC IX: SUB 32
RLCA: RLCA
LD B,6
APACK2 RLCA: RL (HL)
DEC E: JR NZ,$+5
INC HL: LD E,8
DJNZ APACK2
DEC C: JR NZ,APACK1
LD A,E: CP 8: RET Z
INC HL: RET
;*************************************
РАСПАКОВКА ASCII СТРОК.
ASCII_DEPACK LD D,(HL): INC HL: LD E,8
ADEPAC1 XOR A: LD B,6
ADEPAC2 RLC D: RLA
DEC E: JR NZ,$+6
LD D,(HL): INC HL: LD E,8
DJNZ ADEPAC2
ADD A,32: LD (IX),A: INC IX
DEC C: JR NZ,ADEPAC1
RET
;*************************************
╚═════════════ на сегодня хватит ═════════╝
Теперь коменты:
теперича имя/фамилия/пароль/адрес/почт.файл
записаны БОЛЬШИМИ лат буквми.
Имя/фамилия/пароль разделены пробелами.
Диапазон используемых кодов символов:
32...95, сюда входят символы:
пробел, ()*+,-./ 0...9 :;<=>?@
A...Z[]^_
Т.е. в памяти храниться такая строка:
"ALEKSANDR MAJOROV LONG_PASSWORD "
Если нужно имя/фамилию выводить "по человечески"
т.е. "Aleksandr Majorov", то после распаковки
строк надо добавить к коду символа 32,
а перед запаковкой вычесть...
А теперь задание:
1) Hада написать создавалку юзер-листа,
она должна уметь делать такие бяки:
- ввод нового юзера с клавы: вводим
имя, фамилию, пароль, адрес, файл,
уровень, лимит времени, телефон,....
- считывание из файла ^^^ данный о юзере
- удаление юзера
- создание файла с таблицей:
имя/фамилия адрес уровень когда звонил скачал закачал .....
- создание файла с юзер-листом:
имя/фамилия адрес телефон
- и т.д...
2) Hада процедура мувирования диска.
Исходные данные:
объем буфера 16384 с адреса 49152
в основной памяти (25000....49151)
имеется полный каталог диска
имеются утилиты работы с диском
Подробнее:
сама прога будет сидеть ниже страницы
(если она будет сидеть на _самой_ страницы
и юзать буфер в 16384-размер_проги байт,
то это полный rulezz!)
Где-то в памяти с метки CAT_U расположен
полный (9 секов) каталог диска.
Где-то имеются п/п:
TR_DOS - [DE] trk/sec, [HL] адрес,
[B] число секов, [C] = 0 чтение, = 1 запись
SAVE_CAT - всё делает сама...
Вобчем вот такое пока нада...
Hу вот и всё...
С уважением, Aleksandr (*MAS*)
|