mov si, offset my_dta+1Eh
lodsw
cmp ax, '.'
je skip_dir
cmp ax, '.' + '.' << 8
jne process_dir
lodsb
test al, al
jz skip_dir
process_dir:
Поиск директорий
Для начала папка - это, кажется, и есть директория.
А чем метка тома отличается от директории?
Нужно найти все подпапки в папке, где этот файл:
mov ax,4E00h
mov dx,offset disk
mov cx,00010000b ; так ищем директории!!!
int 21h
jc find_end4
jmp short advary2
find_next2:
mov ax,4F00h
int 21h
jc find_end3
advary2:
mov ax,0600h ;это для проверки...
mov dx,0042h ;сколько раз это выполнится
int 21h ;эти проверки работают
;но почему-то выполняется всё на 2
jmp short gege ;раза больше и находит 2 лишние папки,
tutu: ;которых нет с именами "." и "..".
db "54.txt",0
gege:
mov ax,3D02h
mov dx,offset tutu
xor cx,cx
int 21h
mov bx,ax
mov ax,4202h
xor cx,cx
xor dx,dx
int 21h
mov ax,4000h
mov dx,offset my_dta ; где-то есть мой буфер DTA
mov cx,0080h
int 21h
mov ax,3E00h
int 21h
mov ax,0600h
mov dx,0041h
int 21h
jmp short find_next2
find_end4:
mov ax,0FEh
find_end3:
Вопрос:
Откуда взялись 2 лишние папки!?!?!?
Например подпапок в папке 4, а проверка выполняется 6 раз и первыми находятся 2 лишние папки!!!
И ещё вопрос:
Как к своей програмке сделать иконку!?
Когда мы пишем на Assembler'е под Windows, то там есть файл ресурсов, а тут как???
. - в корень диска (кажется)
метка тома -- это метка тома. это несколько байт (по-моему в фат) непонятного назначения. идея была, насколько я понимаю, чтобы каждый раздел имел имя. Том -- это ведь раздел, в переводе с языка ms?
а директории "." и ".." существуют всегда. так надо.
Эти две папки все равно будут :)
[QUOTE=foo]метка тома -- это метка тома. это несколько байт (по-моему в фат) непонятного назначения. идея была, насколько я понимаю, чтобы каждый раздел имел имя. Том -- это ведь раздел, в переводе с языка ms?[/QUOTE]В FATе поначалу метка тома хранилась не в boot-блоке, а в одной из записей корневого каталога, на что указывал специальный бит в атрибутах записи! Сейчас этот бит совместно с младшими тремя битами атрибутов используется при работе с длинными именами, а также как признак метки тома, но при условии, что установлен только он один!
А где они существуют? И куда ведут?
Мне они как-то не очень-то нужны! Меня волнуют реальные директории!
Вот например ".." похоже, что ведёт назад, то есть это выход из данной директории на уровень вниз, а что такое "."? С двумя можно догадаться, а с одной точечкой когда - это не очень понятно...
А эти 2 директории всегда находятся первыми или мне надо имена анализировать, чтобы потом к ним не обращаться и с ними не работать?
можно даже поразвлекаться с ними, и посмотреть к чему приводит переход в них.
повторяю для непонятливых:
'.' это текущая директория.
'..' директория содержащая текущую.
насчёт того что первыми ли они находятся -- я честно говоря не знаю. По логике вещей, они должны быть первыми всегда. Опыт, тоже говорит, что да, но во всяких разных программах, в которых я обращал внимание, эти директории отсеивались по имени.
[QUOTE=Meatcoins]Мне они как-то не очень-то нужны! Меня волнуют реальные директории![/QUOTE]Если они тебе не нужны, то отсеивай их! Какие проблемы?!
Всё получилось!
Я их отсеивал просто по имени...
mov al,"."
mov di,offset my_dta+1Eh
cmp al,byte ptr ds:[di]
Что-то я сразу не додумался...
Всё получилось!
Я их отсеивал просто по имени...
mov al,"."
mov di,offset my_dta+1Eh
cmp al,byte ptr ds:[di]
Что-то я сразу не додумался...[/QUOTE]
а если попадётся директория с именем .bashrc, то как? В венде они не очень распростанены, но бывают. Сам видел.
Может так лучше:
Код:
?
[QUOTE=foo]а если попадётся директория с именем .bashrc, то как? В венде они не очень распростанены, но бывают. Сам видел.[/QUOTE]Он использует функции для имен в формате 8.3, в котором произвольно точки расставлять нельзя! Кстати не все версии Windows позволяют ставить точку в самом начале имени!
Кроме того, мало ли что там виндовс позволяет, а что нет. если уж речь зашла о досе, то там файлы можно и вручную создавать, забивая на досовый драйвер фс, и кто их создавал прежде чем мы их будем читать -- неизвестно.
И в конце концов, такая проверка не сильно сложнее, чтобы было из-за чего спорить. десяток байтов туда-сюда... по-моему приемлимая плата за универсальность :)