FreePascal: TStringList надо инициализировать nil’ом

Вот как-то так:

var
...
lstFiles:TStringList=nil; lstDirs:TStringList=nil;

Иначе возможен плавающий глюк, который внезапно может вылезти где угодно при обращении к TStringList. Возьмет и вылезет EAccessViolation, так что про инициализацию забывать не надо. Делал маленькую внутрикорпоративную утилиту, два дня потерял, отлаживая странный глюк, а вот оно как оказалось.

Планшет Oysters T7X 3G, инструкция, прошивка, софт для рутования.

Преамбула

Тоже принесли в починку, починил, хуле.

Инструкция, прошивка, софт для рутования.

Инструкция, прошивка, софт для рутования, скачать с Mega.nz (7Z-архив, 348 Мб)

Тайна старинных виндов (пародия на КиШ)

Деревня укрылась от Майкрософт
Туда совершенно случайно попал
Один покупатель старинных виндов,
Он их для Билл Гейтса повсюду искал,

Не мог он не удивиться
Хозяйке старого ноутбукА,
Красивая с виду девица
Откуда в этой глуши она?

А? А? А?

Висели на дисплее старинные винды,
В них замер system main process сто с лишним лет назад,
Девица не спускала с них свой очень странный взгляд,
Они давно висят!

Но нет, неподкупна хозяйка была,
Винды отказалась она продавать,
И на ночь оставила гостя она
Свою предложила мужчине кровать.

Но только она заснула,
Тихонько дверь притворив за собой
В гостиную прошмыгнула
Фигура гостя во тьме ночной.

Ой, ой, ой

Висели на дисплее старинные винды,
В них замер system main process сто с лишним лет назад,
И гость не отрывал от них свой сисадминский взгляд,
Они давно висят!

Не сразу в винде неисправность нашел,
Лишь только компьютер перезагрузил,
Обратно он в спальню хозяйки пошёл,
Мол, древнюю вещь ото сна пробудил

В ответ она захрипела
Был дикий ужас в её глазах
Винды грузились — она старела,
Пока не превратилась в прах!

Ах, ах, ах!

Висели на дисплее старинные винды,
В них замер system main process сто с лишним лет назад,
Девица не спускала с них свой очень странный взгляд,
Они давно висят!

Slackware: Краткая инструкция по настройке Samba

Ну мало ли.

Кто не знает, что это такое. Если говорить по рабоче-крестьянски, инструкция о том, как расшарить в локальную сеть каталог на компьютере с Linux.

Про протокол SMB/CIFS и пакет Samba можно почитать по ссылкам в Википедии.

Запуск

Обычно в Slackware сервер Samba доступен «из коробки».

Для запуска Samba в Slackware достаточно дать права на исполнение файлу /etc/rc.d/rc.samba и дать команду на запуск:

chmod 744 /etc/rc.d/rc.samba
/etc/rc.d/rc.samba start

Остановка:

/etc/rc.d/rc.samba stop

Если не надо, чтоб сервер Samba стартовал при загрузке ОС, отбираем права на исполнение:

chmod 644 /etc/rc.d/rc.samba

Samba и Network Namespaces

Samba прекрасно запускается в сетевом неймспейсе (копия) если это будет надо.

В таком случае, Samba надо будет запускать вручную, после того, как нужный namespace настроен, иначе возможны непонятные глюки. Так что в стартовый скрипт, после настройки неймспейсов вставляем команды:

echo "Starting samba server..."
chmod 744 /etc/rc.d/rc.samba
ip netns exec provns /etc/rc.d/rc.samba start

provns — меняем на имя нужного неймспейса.

В скрипт, выполняемый при завершении работы (обычно /etc/rc.d/rc.local_shutdown) вставляем команду завершения работы Samba-сервера:

echo "Stopping samba server..."
/etc/rc.d/rc.samba stop

И отбираем права на исполнение скрипта rc.samba:
chmod 644 /etc/rc.d/rc.samba

Основные настройки

Производим основные настройки в файле /etc/samba/smb.conf

[global]
        workgroup = WORKGROUP
        netbios name = PXE
        server string = Local PXE
        interfaces = 10.10.0.120
        map to guest = bad user
        security = USER
        unix extensions = no
        wide links = yes
        follow symlinks = yes
        log file = /var/log/samba/log.%m
        max log size = 50
        dns proxy = No
        load printers = no
        show add printer wizard = no
        printcap name = /dev/null
        disable spoolss = Yes
        
[printers]
        comment = All Printers
        path = /var/spool/samba
        printable = Yes
        browseable = No

workgroup — рабочая группа (поменяйте на свою)
netbios name — имя компьютера
server string — описание (видно, например, в «Сетевом окружении» из Windows)
interfaces — сетевой интерфейс, который будет прослушивать Samba-сервер. Можно выставить имена сетевых устройств (например, eth0) или задать IP
Делаем доступ к каталогам, открытым в Samba анонимным (без логина и пароля):
map to guest = bad user
security = USER

Следующие 3 строки нужны, чтоб Samba стал поддерживать символические ссылки. Например для того, чтобы не расшаривать каждый раз новый каталог и не перезапускать Samba, а просто закинуть символическую ссылку в каталог, уже расшареннй в Samba:

unix extensions = no
wide links = yes
follow symlinks = yes

log file — куда писать лог
max log size — и его максимальный размер

По умолчанию отключаем DNS-proxy и доступ к принтерам:

dns proxy = No
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = Yes

Секцию [printers] оставляем по умолчанию (все равно все настройки принтеров вырублены в [global], да и принтеров у меня нет).

Шара только для чтения

Иногда полезно создать каталог, чье содержимое доступно в локальной сети только для чтения, например, чтобы пользователь случайно или намеренно не испортил файлы. Пример такой шары из конфига для PXE-сервера. В шаре расположены файлы для Hiren’s Boot CD, запускаемого через PXE (копия)

Права на файлы, расшаренный каталог и подкаталоги должны быть установлены в 644 (чтение и запись для владельца, чтение для группы, чтение для остальных).

В конфиге в отдельной секции описываем шару:

[hbcdshare]
        path=/home/pxe/tftp/distrib/windows/winpe
        public=yes
        browsable=yes
        read only=yes
        guest ok=yes

path — путь к каталогу.
public — публичный, ставим в yes, т.к. каталог нужно открыть для любого пользователя в локальной сети.
browsable=yes — отображение без прямого указания адреса, без этого параметра автоматически не найдется в «Сетевом окружении», например.
read only=yes — только чтение.
guest ok=yes — пускать любого пользователя.

Шара для файлообмена (чтения и записи)

Примечание: Можно расшарить хоть целый раздел.

Права на расшариваемый каталог, подкаталоги и файлы надо установить в 777 (читать, исполнять и записывать для всех)

Секция в конфиге:

[pomojka]
        path=/mnt/sdb2
        public=yes
        browsable=yes
        read only=no
        guest ok=yes

В секции меняется только параметр read only=no

Пример отображения в «Сетевом окружении» Windows:

Пример конфига на Pastebin

Печальная песня провинциального электрика (пародия)

Ох, опора подгнила,
И бригаду не прислали!
Нас осталось только два.
Нас с зарплатой наебали!
Провод меж опор провис,
И с защитою напряжно!
Но мы держим эту сеть,
Мы сражаемся отважно!

Транс взаорвался, все пиздец,
Больше негде запитаться!
Эх, нажремся, брат-боец,
И попремся увольняться!
Будем водкой торговать,
У меня магаз у мамi,
А начальнику с женой
Светит #сказочноебали!

Отчет о наблюдении неопознанного летающего объекта (НЛО/НВЯ)

Работники лесного хозяйства, задействованные на посадке деревьев, сообщают о случае наблюдения неопознанного летающего объекта неподалеку от их места работы.

Объект треугольной формы наблюдался в районе оз. Ведлозера (д. Палалахта), республика Карелия, Пряжинский район, в июне 2023 г. Объект наблюдался в вечернее и ночное время на протяжении трех дней, со слов очевидца, с 8 по 11 июня.

Примерное место нахождения объекта, восстановленное по опросу очевидца (изображение с Google.Maps):

Опрашиваемый очевидец сделал рисунок с пояснениями:

Объект представлял из себя высоко висящий треугольник, по краям окоямленный яркими шарообразными огнями желтого цвета. К объекту периодически подлетали и отлетали от него более мелкие и менее яркие точечные объекты, которые также отображены на схеме очевидца.

Основной объект не перемещался, и во все дни наблюдения находился примерно на одном и том же месте.

Очевидцами, кроме опрошенного субъекта, являлись еще 4 работника лесного хозяйства.

Примечание о районе оз. Ведлозера: Район оз. Ведлозера считается в республике Карелия аномальной зоной, например, явление, известное как «Водяной из Ведлозера» попало в известную книгу Николая Непомнящего «Энциклопедия непознанного».

Ссылка на отрывок книги Копия отрывка в PDF

Также, по сообщениям местных жителей, возле оз. Ведлозеро наблюдались и иные аномальные явления.

Рациональное объяснение

Коллега из нашей группы предложила рациональное объяснение, заключающееся в том, что это был метеорологический стационарный зонд-аэростат, снабженный светодиодной подсветкой, а размер и расстояние до объекта были неверно оценены наблюдателями. Однако, данная гипотеза не объясняет более мелких объектов, подлетающих и улетающих от и к основному.

Отчет составлен 29.07.2023 г., информационным координатором группы «Дельта», г. Петрозаводск, р. Карелия. Опрос свидетеля НВЯ/НЛО произведен лично.

Преобразование двоичных (RAW) данных в текстовый шестнадцатеричный формат.

Преамбула

Задача, которую мне поставил клиент, была такая — преобразовать бинарный файл в текст, который можно распечатать и переслать по почте. Чтоб его можно было сканером распознать, и обратно в бинарный файл преобразовать. Ну очень плохо ходят флэшки, и тем более, криптостойкие донглы промеж границ из-за Хуйла, сами понимаете.

Пример тестового бинарного файла (в Linux):

В Windows:

Понятно, что напечатать это нельзя, для распечатки надо преобразовать бинарный RAW-формат в что-то удобопечатоемое, например в строки, содержащие шестнадцатеричные цифры:

EA 38 B6 C1 18 1A 4F B3 5F 81 B7 A4 1B 50 89 18 B3 0B 24 27 36 59 57 D0 3A 78 1C
3E D6 F2 27 01 13 4B 54 65 6E 44 61 23 7D D4 ED 60 CE 8E C1 A2 58 45 BB 35 84 A7
69 28 D4 09 5F 99 F5 27 CA 30

Linux

В Linux есть сразу несколько инструментов, позволяющих выполнить дамп файла в набор шестнадцатеричных значений, причем «из коробки». Не зря же эта ОС изначально писалась программистами для программистов.

Кратко ознакомиться с этими инструментами можно здесь:

Convert Binary Data to Hexadecimal (оригинал статьи на буржуйском)
Преобразование двоичных данных в шестнадцатеричный формат (Перевод на русский, PDF)

Я воспользовался утилитой hexdump, и написал небольшой скрипт, который при вызове его с параметром, содержащим путь к файлу, создает в каталоге с оригинальным файлом файл имя_оригинального_файла.dump, который содержит шестнадцатеричное представление исходного файла:

dumpfile <имя_файла>

Основной алгоритм укладывается в одну строку:

cat $1|hexdump -e '27/1 "%02X " "\n"' >$1.dump

1. Читаем файл, переданный на вход скрипта командой cat.
2. Передаем в pipe (|) данные hexdump‘у
3. Скидываем вывод (>) в файл $1.dump

Скрипт на GitHub

Windows

В винде, как обычно — в таких случаях все через жопу, слава Ктулху, нашлись умные люди, которые все сделали за меня на BAT/CMD и доступном в системе JScript.

Совместимость — начиная с Windows XP

Перевод справки BAT-файла.

HEXDUMP [/Опция [Значение]]...

Записывает содержимое стандартного ввода в шестнадцатеричном виде в стандартный вывод, по 16 байт на строку, используя следующий формат:

ООООООО ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ААААААААААААААААА

где:

0000000 = шестнадцатеричное смещение в пределах файла
XX = шестнадцатеричное значение байта
AAAAAAAAAAAAAAAA = байты в формате ASCII (управляющие коды и не-ASCII в виде . [символ точка])

Вывод кодируется как ASCII, каждая строка завершается символом CarriageReturn — перевод строки.

Поведение можно изменить, добавив любую комбинацию следующих параметров:

/I InFile — ввод из InFile вместо стандартного ввода
/O OutFile — вывод в OutFile вместо stdout: — перезаписывает InFile
/NA — отключить вывод ASCII-символов.
/NO — отключить вывод смещений
/R — Необработанный шестнадцатеричный код в одной строке без пробелов между байтами.
/LF — LineFeed как признак конца строки (UNIX-формат) вместо CarriageReturn LineFeed (по умолчанию, формат Windows)
/NL — без разделителей строк, весь вывод в одной строке без разделителей строк
/U — вывод в кодировке Unicode с BOM (UTF-16)
/V — Вывести информацию о версии
/? — Вывести эту справку

HEXDUMP.BAT версии 2.1 был написан Дэйвом Бенхамом.
и поддерживается на https://www.dostips.com/forum/viewtopic.php?f=3&t=8816

Нужные (мне) параметры

Вывод в файл (пример):

hex_dump.bat /I test.temp /O test.temp.dump /NA /NO

Вывод на консоль:

hex_dump.bat /I test.temp /NA /NO

Пример вывода на консоль:

60 ab 2b b8 4a 3f 0d 91  a0 a4 09 f0 8f 4b 51 95
3a 22 1b 0e 5b 6d d0 3f  80 96 c5 22 98 dc 4a 2b
89 38 52 96 42 c0 ab 04  c4 8e b8 87 dd 7c 4a b2
e1 6a b1 c2 30 66 82 54  21 5a 40 a2 bb f8 19 89

Скачать BAT-файл

С GitHub
Перевод помощи к скрипту

Источник

Аналог линуксовой команды cat в Windows

Внезапно, есть.

Это команда type.

Использование:

type <путь_и_имя_файла>

Справка по команде

Формат командной строки:

TYPE [диск:][путь]имя_файла

Примеры: type /? — отобразить подсказку по использованию.

type mytextfile.txt — вывести на экран содержимое текстового файла mytextfile.txt текущего каталога.

type mytextfile.txt | more — вывести на экран содержимое текстового файла mytextfile.txt в постраничном режиме.

type mytextfile.txt > D:\newfile.txt — перенаправление вывода команды type в файл, т.е. копирование текстового файла mytextfile.txt в текстовый файл D:\newfile.txt.

type bigfile.iso > nul — вывод файла на фиктивное устройство nul, что эквивалентно просто чтению заданного файла.

При выводе на экран нетекстовых файлов, байты, содержимое которых представлено неотображаемой частью таблицы ASCII (0x00 – 0x1F) интерпретируется как служебные символы, что выражается в непредсказуемом перемещении курсора, выводе звука, очистке окна и т.п.

Источник

Совместимость: DOS 6.x и выше.

Новое кумулятивное обновление Windows 7 от любимейшего Simplix

Преамбула

Понадобилось в одном из офисов массово обновить винды.

Проблемы

1. Теперь пакет с сайта не скачать с российских IP.
2. Не установится, если обнаружит российский IP при запуске, надо физически отключать интернеты, выдернув сетевой кабель из компа.

Понятно, в связи с чем.

Миф

На форумах (дурацких) люди (дурацкие) говорят, что последний пакет обновлений грохает русскую винду, даже если предыдущие и следующие условия соблюдены. Все работает, проблем не возникло, проверено 15 раз.

Пасхалочка


Как ответить на вопросы правильно, думаю, догадаетесь сами.
И да, минутку надо подождать, после появления второго окна (на совсем медленных ведрах лучше две).

Ссылки

Скачать обновление (последняя версия)

Последняя довоенная версия (копия), если кому надо для успокоения души. Ключик спрашивать лично в Телеграме, вате не дам.

UPD к предыдущему посту про tcplay.

TCPLAY: шифрование несистемного раздела. (копия)

7. Отмонтирование и отключение раздела (поместить в скрипт /etc/rc.d/rc.local_shutdown):

umount /mnt/sdb2c
tcplay --unmap=sdb2c
rmdir /mnt/sdb2c

7. Отмонтирование и отключение раздела (поместить в скрипт /etc/rc.d/rc.local_shutdown):

umount /mnt/sdb2cи rmdir /mnt/sdb2c

Можно поместить для успокоения души, tcplay и xpartx сами должны при получении KILL-сигнала корректно завершить работу и ничего не попортить, как они делают с разделами на системном диске.

Как найти Полярную звезду. И немного про эффект Манделы.

Пост Леонида Каганова напомнил историю.

Во-первых, расскажу, как найти ее правильно, а во-вторых, вспомню, как несколько лет назад, со мной и друзьями случился «эффект Манделы» ИРЛ.

Как найти Полярную звезду.

Чтобы найти Полярную звезду, надо сначала найти характерную конфигурацию из семи ярких звёзд — созвездие Большой Медведицы, напоминающее ковш (астеризм Большой Ковш), затем через две звезды (Дубхе и Мерак) «стенки» ковша, противоположной «ручке», мысленно провести линию, на которой отложить пять раз расстояние между этими крайними звёздами. Примерно в конце этой линии находится Полярная звезда. Направление на Полярную звезду совпадает с направлением на север, а её высота над горизонтом совпадает с широтой наблюдателя.

В Википедии есть правильная инструкция

И про «эффект Манделы».

Сидим с друзьями, Тема спрашивает, помню ли я, как найти полярную звезду. Вообще, это такой школьный вопрос по астрономии, который мы обычно задаем новым членам нашего общества, типа такой вопрос на профпригодность.

— Конечно, ищешь Большую Медведицу (ковш), потом направляешь взгляд вверх, там будет Малая Медведица, от хвоста Большой Медведицы (от последней звезды в хвосте Большой) проводишь линию, получается, третья звезда в ковше Малой, если считать сверху и слева направо, это она и есть.

Скай и Санек это дело подтверждают. А они наблюдатели гораздо лучше меня, у них вся карта северного полушария в голове.

— А теперь, парни, загуглите-ка вики! Звезда-то Полярная в хвосте ковша Малой Медведицы.

Оказывается, все так, в хвосте, и схема есть в Википедии, как ее найти. И по бумажной карте, которая висит в нашем «офисе» я сверился, да, Полярная — последняя звезда в «ручке» ковша Малой Медведицы.

Причем, Тема помнит оба варианта, а мы только неправильный. Во всяком случае, неправильный в этой вселенной.

Вот ще це було? Были ж абсолютно трезвые и без веществ, а с ума поодиночке сходят, вместе только гриппом болеют.

До сих пор тот случай иногда вспоминаем.

TCPLAY: шифрование несистемного раздела.

Как шифровать системный раздел и сделать загрузочную флешку c initrd для шифрованного Linux, можно найти по тегу tcplay (копия)

Подключил я к серверу дополнительный HDD и решил его пошифровать.

Внимание! Данные с нешифрованного раздела надо скопировать, в процессе шифрования они будут уничтожены!

1. Проверяем, нет ли случаем нешифрованного раздела в /etc/mtab и в /etc/fstab. Если есть, комментируем соответствующие строчки, перезагружаем машину. Пример:

fstab:

...
#/dev/sdb2		/mnt/sdb2	 ext2	     defaults	      0   0
...


mtab:

...
#/dev/sdb2 /mnt/sdb2 ext2 rw 0 0
...

2. Генерируем ключ, можно воспользоваться /dev/urandom (да, это безопасно, уже обсуждалось):

dd if=/dev/urandom of=sdb2key bs=1 count=1048576

Вывод:

1048576+0 records in
1048576+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 2.34336 s, 447 kB/s

3. Шифруем раздел:

tcplay --create --device=/dev/sdb2 --cipher=AES-256-XTS --pbkdf-prf=whirlpool --keyfile=sdb2key --insecure-erase

Внимание! Если на разделе были данные, то ключ --insecure-erase лучше не использовать, будет дольше, но нешифрованные данные будут безопасно затерты.

Внимание! Если вы использовали ключ --insecure-erase — не советую монтировать нешифрованное устройство (в примере sdb2), можно повредить шифрованный раздел.

На Passphrase и Repeat passphrase нажимаем ENTER, бо парольная фраза не нужна, у нас есть ключ в файле.

Вывод:

Summary of actions:
 - Create volume on /dev/sdb2

 Are you sure you want to proceed? (y/n) y
Creating volume headers...
Depending on your system, this process may take a few minutes as it uses true random data which might take a while to refill
Writing volume headers to disk...
All done!

Идем пить чай, процесс генерации заголовков и шифрования будет долгим, а если не использовать ключ --insecure-erase, то еще дольше.

5. Маппим (подключаем) и монтируем шифрованный диск:

tcplay --map=sdb2c --device=/dev/sdb2 --keyfile=/path/to/keyfile/sdb2key

6. Далее диск надо отформатировать, желательно в нежурналируемой файловой системе, например ext2:

mkfs -t ext2 /dev/mapper/sdb2c

Вывод:

mke2fs 1.43.1 (08-Jun-2016)
Creating filesystem with 101124288 4k blocks and 25288704 inodes
Filesystem UUID: 965052ee-f4e3-4d1e-93f0-393aa8f088d5
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968

Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done

Продолжаем монтирование:
mkdir -p /mnt/sdb2c
mount -t ext2 /dev/mapper/sdb2c /mnt/sdb2c

Эти же строки надо включить в стартовый скрипт (/etc/rc.d/rc.local) :

tcplay --map=sdb2c --device=/dev/sdb2 --keyfile=/path/to/keyfile/sdb2key
mkdir -p /mnt/sdb2c
mount -t ext2 /dev/mapper/sdb2c /mnt/sdb2c

где: /path/to/keyfile/sdb2key — путь к реальному ключевому файлу. Файл(-ы) от других разделов вполне можно хранить на системном разделе, если тот зашифрован.

7. Отмонтирование и отключение раздела (поместить в скрипт /etc/rc.d/rc.local_shutdown):

umount /mnt/sdb2c и rmdir /mnt/sdb2c

Можно поместить для успокоения души, tcplay и xpartx сами должны при получении KILL-сигнала корректно завершить работу и ничего не попортить, как они делают с разделами на системном диске

ФАНФАРЫ!

Linux: Отключение проверки SSL-сертификатов в git.

Внимание! Так делать не рекомендуется всеми официальными источниками, но если очень надо, то можно. Используйте на свой страх, риск и хвост!

Ошибка

Если, при клонировании репозитория (git clone https://example.org/project.git) случилось следующее:

Cloning into 'project '...
fatal: unable to access ' https://example.org/project.git ': SSL certificate problem: certificate has expired

То сертификат, либо сайта, либо один из корневых в вашей системе просрочен.

Примечание: Интернет-адреса условные для примера.

Глобальное отключение проверки сертификатов для git

git config --global http.sslVerify "false"

Выполнять надо от root.

После этого git не будет проверять валидность сертификатов из любых источников.

Включение обратно

git config --global http.sslVerify "true"

Т.е. если такой баг только на каком-то одном сайте, то можно выключить, скачать и снова включить. Но помните, это глобальный параметр. Не включите обратно, так и будет игнорировать сертификаты.

Lazarus: Генерация случайной строки из определенного алфавита (паттерна) символов.

На самом деле, оказалось довольно простой задачей.

Основная программа

var P1,P2,P3,P4:String; I:Integer;
begin
  P1:='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  P2:='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  P3:='abcdefghijklmnopqrstuvwxyz0123456789';
  P4:='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

  for I:=1 to 23 do
  begin
    WriteLn(GenerateString(75,P1));
  end;
  WriteLn('Press ENTER');
  ReadLn();
end.

Пока все совсем просто, создаем 4 паттерна (алфавита) для теста, заполняем паттерны, создаем счетчик для цикла, а в цикле вызываем функцию GenerateString, таким образом генерируем 23 строки.

Функция GenerateString

1. Функция GenerateString принимает 2 параметра — длина генерируемой строки и паттерн/алфавит, возвращает строку:

function GenerateString (len:Integer; Pattern:String): String;

2. Заводим две внутренних переменных, счетчик для текущей позиции символа в генерируемой строке, и переменную для хранения случайного символа, который получим из строки Pattern:

var I:Integer; C:Char;

3. Инициализируем значение переменной Result, которую функция автоматически возвратит в качестве результата функции:

Result:='';

Если этого не сделать, то при попытке заранее выделить память под переменную, компилятор выдаст предупреждение:

Hint: Function result variable of a managed type does not seem to be initialized (Подсказка: Переменная результата функции управляемого типа, похоже, не инициализирована).

4. И счетчик для текущего символа:

I:=0;

5. Выделяем память под будущую строку, если этого не сделать, память будет выделяться динамически, что будет тормозить процесс:

SetLength(Result,len);

6. Запускаем цикл:

while I < len do
begin
	//...
end;

В цикле:

1. Получаем случайный символ.
2. Записываем полученный символ в нужное место результирующей строки.
3. Увеличиваем счетчик цикла.

Обращение к символу в строке

В Pascal это очень просто, строка рассматривается как массив, а символы — элементы массива. Нумерация символов в строке начинается с единицы, т.е. если мы хотим в переменную C (типа char) записать третий символ из строки Pattern, то это делается так:

C:=Pattern[3];

Получение случайного целого числа из диапазона значений

Для этого применяется функция RandomRange из модуля Math со следующим синтаксисом:

RandomRange(начальное_значение, конечное_значение);

т.е. если вызвать функцию таким образом:

I:= RandomRange(1,10);

то в переменной I (целого типа) окажется случайное значение от 1 до 10.

Внимание! Не забудьте в начале программы подключить модуль Math!

Uses Math;

Ну а длина строки, это совсем просто: Length(Pattern).

Итого:

1. Получение случайного символа:

C:=Pattern[RandomRange(1, Length(Pattern))];

2. Запись символа в результирующую строку:

Result[I+1]:=C;

3. Увеличение счетчика:

inc(I);

Код функции целиком

function GenerateString (len:Integer; Pattern:String): String;
var I:Integer; C:Char;
begin
  Result:='';
  I:=0;
  SetLength(Result,len);

  while I < len do
  begin
       C:=Pattern[RandomRange(1, Length(Pattern))];
       Result[I+1]:=C;
       inc(I);
  end;
end;

Результат работы программы

Пример целиком

На GitHub