[{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-55 мин."},"isBanned":false,"roleString":"Мастер-Эксперт","roleIcon":"fa-user-ninja","socialMedia":[],"aboutText":"","aboutHTML":"","signatureText":"Facta loquuntur.","signatureHTML":"Facta loquuntur.","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":4.979,"absoluteRating":109927,"dynamicRating":1684.698,"dynamicRatingStars":10,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-03-29T11:55:36.4316795+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":11,"counters":{"daysAtPortal":6525,"questions":12,"questionsPosts":18345,"questionsAnswers":6663,"questionsPostsEvaluations":2831,"forumPosts":5697},"isRfproUserClass":true,"id":17387,"name":"Гордиенко Андрей Владимирович","email":"","role":10,"registDate":"1000-01-01T00:00:00","lastDate":"2024-03-27T19:01:17","photo":"users/17387/f4979bc95a484b9f43f75cfe66538acd.jpg","lastDateIndicatorClass":"red","lastDateIndicatorText":"давно","photoPreview200":"users/17387/200_f4979bc95a484b9f43f75cfe66538acd.jpg","photoPreview120":"users/17387/120_f4979bc95a484b9f43f75cfe66538acd.jpg","photoPreview100":"users/17387/100_f4979bc95a484b9f43f75cfe66538acd.jpg","photoPreview80":"users/17387/80_f4979bc95a484b9f43f75cfe66538acd.jpg","photoPreview40":"users/17387/40_f4979bc95a484b9f43f75cfe66538acd.jpg","isPhotoExists":true,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":true},{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-55 мин."},"isBanned":false,"roleString":"Мастер-Эксперт","roleIcon":"fa-user-ninja","socialMedia":[],"aboutText":"Я пенсионер. Образование высш, радио-инж. Работал инж-электроником, ведущим средств телевидения, связи, слесарем и инженером КИП, грузчиком, программистом. На моём счету десятки рац-предложений, в тч с большим экономич эффектом.\nЯ люблю компьютеры, ремонтирую их друзьям и соседям. Пишу полезные программки в vbs-файлах, автоматизирующие настройку Win-систем, приложений и работу с ними.","aboutHTML":"Я пенсионер. Образование высш, радио-инж. Работал инж-электроником, ведущим средств телевидения, связи, слесарем и инженером КИП, грузчиком, программистом. На моём счету десятки рац-предложений, в тч с большим экономич эффектом.\u003Cbr\u003EЯ люблю компьютеры, ремонтирую их друзьям и соседям. Пишу полезные программки в vbs-файлах, автоматизирующие настройку Win-систем, приложений и работу с ними.","signatureText":"","signatureHTML":"","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":4.935,"absoluteRating":25753,"dynamicRating":463.397,"dynamicRatingStars":8,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-03-29T11:55:36.4319041+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":11,"counters":{"daysAtPortal":5557,"questions":25,"questionsPosts":7459,"questionsAnswers":1225,"questionsPostsEvaluations":788,"forumPosts":399},"isRfproUserClass":true,"id":259041,"name":"Алексеев Владимир Николаевич","email":"","role":10,"registDate":"1000-01-01T00:00:00","lastDate":"2024-01-30T15:24:45","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":true},{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-55 мин."},"isBanned":false,"roleString":"Старший Модератор","roleIcon":"fa-user-tie","socialMedia":[],"aboutText":"634034, г.Томск, ул.Красноармейская 122, кв.173","aboutHTML":"634034, г.Томск, ул.Красноармейская 122, кв.173","signatureText":"","signatureHTML":"","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":4.985,"absoluteRating":21746,"dynamicRating":414.846,"dynamicRatingStars":8,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-03-29T11:55:36.4320621+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":13,"counters":{"daysAtPortal":5242,"questions":1,"questionsPosts":1973,"questionsAnswers":1283,"questionsPostsEvaluations":588,"forumPosts":91},"isRfproUserClass":true,"id":312929,"name":"Коцюрбенко Алексей Владимирович","email":"","role":12,"registDate":"1000-01-01T00:00:00","lastDate":"2023-11-05T17:20:40","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":true},{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-55 мин."},"isBanned":false,"roleString":"Советник","roleIcon":"fa-user-ninja","socialMedia":[],"aboutText":"","aboutHTML":"","signatureText":"","signatureHTML":"","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":5,"absoluteRating":9460,"dynamicRating":391.716,"dynamicRatingStars":8,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-03-29T11:55:36.4322044+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":10,"counters":{"daysAtPortal":2415,"questions":0,"questionsPosts":472,"questionsAnswers":398,"questionsPostsEvaluations":298,"forumPosts":1},"isRfproUserClass":true,"id":401284,"name":"Михаил Александров","email":"","role":9,"registDate":"1000-01-01T00:00:00","lastDate":"2024-03-27T19:23:59","photo":"users/401284/48171011af39b6bb3a74df8c0fcf97d0.jpg","lastDateIndicatorClass":"red","lastDateIndicatorText":"давно","photoPreview200":"users/401284/200_48171011af39b6bb3a74df8c0fcf97d0.jpg","photoPreview120":"users/401284/120_48171011af39b6bb3a74df8c0fcf97d0.jpg","photoPreview100":"users/401284/100_48171011af39b6bb3a74df8c0fcf97d0.jpg","photoPreview80":"users/401284/80_48171011af39b6bb3a74df8c0fcf97d0.jpg","photoPreview40":"users/401284/40_48171011af39b6bb3a74df8c0fcf97d0.jpg","isPhotoExists":true,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":true},{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-55 мин."},"isBanned":false,"roleString":"Посетитель","roleIcon":"fa-user","socialMedia":[],"aboutText":"","aboutHTML":"","signatureText":"","signatureHTML":"","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":4.987,"absoluteRating":6052,"dynamicRating":224.691,"dynamicRatingStars":7,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-03-29T11:55:36.4323536+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":2,"counters":{"daysAtPortal":2693,"questions":0,"questionsPosts":527,"questionsAnswers":250,"questionsPostsEvaluations":155,"forumPosts":0},"isRfproUserClass":true,"id":400669,"name":"epimkin","email":"","role":1,"registDate":"1000-01-01T00:00:00","lastDate":"2024-02-19T23:46:05","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":false},{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-55 мин."},"isBanned":false,"roleString":"Посетитель","roleIcon":"fa-user","socialMedia":[],"aboutText":"","aboutHTML":"","signatureText":"[i]С уважением[/i]\n[i]shvetski[/i]","signatureHTML":"\u003Ci\u003EС уважением\u003C/i\u003E\u003Cbr\u003E\u003Ci\u003Eshvetski\u003C/i\u003E","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":4.963,"absoluteRating":11493,"dynamicRating":202.204,"dynamicRatingStars":7,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-03-29T11:55:36.4325121+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":2,"counters":{"daysAtPortal":5683,"questions":35,"questionsPosts":1567,"questionsAnswers":588,"questionsPostsEvaluations":324,"forumPosts":44},"isRfproUserClass":true,"id":226425,"name":"Konstantin","email":"","role":1,"registDate":"1000-01-01T00:00:00","lastDate":"2023-09-16T03:51:40","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":false}]
Уважаемые эксперты, здравствуйте, у меня возникли вопросы по главе 9 книги О.А.Калашникова,
листинг 9.3 и листинг 10.1, 1) call Open_file jc Error_file
процедура (subroutine в Фортране или функция в Си) Open_file:
Код:
Open_file proc cmp Handle,0FFFFh jne Quit_open mov ax,3D00h int 21h mov Handle,ax ret Quit_open: stc ret Handle dw 0FFFFh Open_file endp
вопросы - а) зачем нужна строка "cmp Handle,0FFFFh", когда переменная Handle уже инициализирована в этой процедуре-сабрутине-функции и ей уже присвоено значение 0FFFFh ? б) ведь Handle - это всего лишь переменная, а не регистр ? в) что означает шестнадцатиричное число 0FFFFh ? это адрес стэка ? адрес начала или конца стэка (последний зашел - первый вышел) ?
2)
Код:
mov cx,offset Finish-100h mov dx,offset Begin int 21h
здесь Finish - это адрес первого свободного байта сразу же после конца данной ассемблеровской com-программы. это я понимаю. далее - 100h - это адрес, в CS-сегменте (сегменте кода), первой строки данной com-программы. вопросы - а) означает ли это, что строки
не занимают никакой памяти в com-файле, а предназначены лишь как инструкции для самого Ассемблера-компилятора, нежели для микропроцессора ? б) что находится в первых от 0h до 0FFh байтах в полученном исполняемом com-файле ? либо поставим вопрос по-другому - данная исполняемая com-програма (файл) начинается с ассемблеровских инструкций сразу же после метки "Begin:" ? а когда данный com-файл загружается из ПЗУ в ОЗУ - сразу же после выдачи команды "prog09.com" в Dos-овской оболочке и соответственно после нажатия клавиши "Enter", то именно в ОЗУ (а не в самом com-файле) первые байты с коде сегмента CS, от 0h до 0FFh, заняты чем-то ? чем-именно ? эти первые байты заняты чем-то только для модели tiny ? в) "Finish-100h" - это мне понятно: это размер в количестве байта данной com-программы - от "mov dx, offset File_name" и до "end Begin". правильно ли я это понимаю ?
3)
Код:
call Close_file ; ------------ Выводим сообщение -------------- mov ah,9 mov dx,offset Mess_ok int 21h ret
вопрос - почему используется команда "ret", а не "int 20h" ?
0) Перестаньте называть подпрограммы в разных интерпритациях
Смысл одинаков, некоторый код выделен в отдельный логический блок, с разницей, что первая не возвращает параметр, вторая - да. Не смотря на то в ЯВУ С всё есть функция, все таки есть Fortran'новские и subroutine и function. Различия определяются типом возвращаемого параметра. VOID - определяет процедуру.
1) 0FFFFh - это уникальное число равное -1, такое же как и 00000h, это число(-1) не может быть дескриптором или указателем на открытый файл. И.В. Вам не все рассказал о файлах в прошлый раз. Функций работы с файлами больше.
Чтобы было понятно на рисунке идут номер в 16-ой системе, в 10-ой, называние функции, версия ДОС и тип функции. F(file control block- FCB) и H(handle- дескриптор). В первых версиях ДОС, программа должна была сама хранить информацию об открытых файлах в FCB, это было не удобно, т.к. приходилось постоянно перепрыгивать от одного к другому, меняя указатель на FCB. Начиная со второй версии ОСь, взяла на себя хранение такой информации, предоставляя пользователю, только указатель(возможно индекс в массиве структур ) на структуру аналогичную FCB.
В данном случае -1 используется как флаг открытия файла, если там другое число - файл открыт.
2) а - эти строки сокращенно описывают сегмент(CSEG segment), указывают компилятору относительно каких сегментных регистров генерировать код по умолчанию(assume), размещение кода в памяти(org 100h)
б - по этим адресам (от 0h до 0FFh) находится стандартный префикс программы, подставляемой системой при запуске.
в - Finish - адрес конца кода в памяти, 100h - адрес начала кода в памяти. Итого вычисляется длина кода в памяти, без префикса программы.
3) Кроме стандартного префикса программы система ещё заносит в стек 00000h и когда будет выполнено команду RET, то управление будет передано на адрес CS : 00000h, а там int 20h
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
Почитайте про PSP (program segment prefix, сегмент программного префикса) Первые 100h содержат указанную информацию. Забегая вперед, начиная с адреса 80h там же лежит строка параметров, передаваемая программе в командной строке.
Об авторе:
"Если вы заметили, что вы на стороне большинства, — это верный признак того, что пора меняться." Марк Твен
Уважаемые Константин Николаевич и Игорь Витальевич, добрый вечер,
1) спасибо большое за Ваши ценные сообщения-консультации.
2) конечно, я попытаюсь исправиться в следующий раз - ассемблеровские подпрограммы называть подпрограммами, а не брать аналогию из Фортрана (subroutine, function) и из Си (void/int/float/double/complex функции) - тем не менее такие аналогии полезны всего-лишь для понимания сути дела в Ассемблерах - для новичков, изучающих Ассемблеры.
Константин Николаевич, я понимаю, что Вы являетесь экспертом-профессионалом в военной электронике и программировании военного "железа" (hardware) и подкованы как в теории так и в практике - поэтому я приношу лично Вам свои извинения за Си-Фортран-овские аналогии - впредь попытаюсь Вас заранее предупреждать на мини-форумах, что такие аналогии необходимы мне только для понимания сути дела в Ассемблерах. Б-га ради извините, если я чем-то Вас лично обидел или затронул Ваши профессиональные чувства.
3) "...Функций работы с файлами больше..."
F(file control block- FCB) и H(handle- дескриптор) - что обозначают данные понятия-термины применительно к ассемблеровским функциям (действиям - использую данный термин для понимания), связанными с файлами ?
4) насколько я понимаю, данные файловые функции должны записываться в регистр AX. не так ли ?
5) в дальнейшем попытаюсь поэкспериментировать-"поиграть" с данными файловыми функциями.
Структуру FCB, я Вам дал. Работа с файлами функциями F(см. таблицу)происходит с помощью этой структуры. Работа с функциями H, проще, но система о существовании FCB не забыла, т.к. она используется функциями найти первый/найти следующий файл. Практически все функции, которые Вы будете использовать параметры имеют следующие значения: AH - номер функции данного прерывания(но не всегда); (остальные регистры могут и не использоваться, поэтому нужно смотреть описание самой функции) AL - иногда это может быть как параметр(аргумент), так и номер подфункции; BX - в разных функциях имеет разное значение; CX - обычно указывает на количество каких-то значений; DX - обычно указывает на какой-то участок памяти, с которым должна отработать функция.
Советую найти в сети книгу Данкан Р. Профессиональная работа в MS-DOS, ней расписаны основные функции прерываний BIOS и DOS, на русском. Все описания выглядят так:
(саму функцию выбрал на угад, просто обратите внимание на подачу информации).
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
2) на данный момент я пока не разобрался в F(file control block- FCB) и H(handle- дескриптор), хотя для Вас это выглядит очень элементарной информацией - я обязательно найду в Интернете рекомендуемую Вами книгу Р.Данкана, после ознакомления с которой и с помощью консультаций с Вами в будущем, надеюсь, что разберусь в данной теме.
3) а пока ... FCB - это область (блок) памяти ? где ? в ОЗУ ?
Код:
В первых версиях ДОС, программа должна была сама хранить информацию об открытых файлах в FCB, ...
допустим имеется com-программа, которая читает файл и имеется первая версия DOS. где находится FCB ? это com-программа также имеет дополнительные блоки FCB ?
4)
Код:
... это было не удобно, т.к. приходилось постоянно перепрыгивать от одного к другому, меняя указатель на FCB.
значит для каждого открытого файла создавался-резервироовался в памяти свой блок FCB (см. картинку выше), не так ли ? что значит "постоянно перепрыгивать от одного к другому" (от одного файла к другому ?) и что значит "меняя указатель на FCB" ? Константин Николаевич, пожалуйста поясните подробнее вопросы из пункта 4).
Представим связку компьютер-пользователь в виде цепочки(в подробности самой работы не рассматриваем, только общее представление):
Биос работает с железом на уровне портов, предоставляя свои функции и устанавливает свои обработчики. ОСь работает посредством функций биос, или игнорируя их, с помощью портов с железом, предоставляя свои функции и добавляя свои обработчики в вершину цепочки обработчиков данного прерывания или заменяя их своими. Программа пользователя может работать с функциями ОСи, биос, или прямо с железом, устанавливая нужные себе обработчики в вершине цепочек обработчиков.
Теперь представим, пользователь нажал клавишу, сработал аппаратный обработчик клавиатуры(к примеру программы пользователя, его адрес записан в таблице прерываний 0х0000:0х0024). Если он не обрабатывает данное событие, то передает управление обработчику, который был раньше, в упрощенном варианте, это обработчик ОСи, если и он не обрабатывает, то управление получает обработчик биос. Если один из обработчиков нашел свое событие, то он записывает обработанные данные в область данных программы/служебные области своего уровня, из которых потом они читаются кодом(функциями) данного уровня. Вот такая примерная цепочка событий.
FCB: Рассмотрим функцию DOS чтение открытого файла:
и функцию BIOS чтение накопителя НГМД(дискета) или HDD
Заметили, что они работают на разных уровнях биос работает на уровне цилиндров-дорожек-секторов(ЦДС -физическое расположения файла на диске), ОСь это скрывает от программиста подменяя дескриптором всю работу: -получение имени файла; -чтение таблицы FAT(как более простая версия файловой системы, в качестве примера), если глубоко не копать, находится имя файла, его расширение, его атрибуты, размещение на диске, т.е. физический адрес в формате ЦДС; - нахождение нужного имени в таблице FAT; - проверка прав доступа; - получение данных ЦДС; - чтение минимум одного сектора, т.е. 512 байт, и это не смотря на то, что пользователь может захотеть читать файл по одному байту(кластеризацией пока мозги не грузим).
Думаю, что даже этого достаточно, хотя и это далеко не всё. Так вот FCB как раз хранит временную информацию об открытом файле упрощая работу системе. ОСь при открытии файла заполняет эту таблицу, потом только обращается к ней сразу получает нужную информацию. В первых версиях DOS хранение FCB ложилось на программиста, начиная со второй версии ОСь предоставляла пользователю дескриптор (который может быть как адресом блока FCB в служебной области, так и индексом в некотором массиве блоков FCB)
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
1) При открытии файла, в переменную Handle записывается некоторое число-дескриптор, по которому ОСь однозначно идентифицирует данный файл. Это число не может быть 0-4(stdin, stdout, stderr, stdaux, stdprn) -значения соответственно уже зарезервированы, поигравшись с файлами-дескрипторами (три последовательно открытых файла имеют последовательные номера, т.е. это индексы некоторого массива управляющих файлами структур операционной системы) и величина ограниченна значением системной переменной FILES в файле config.sys и максимальное значение равно 255. 0хFFFF - уникальное число(-1 или 65535), т.к. такое число одновременно открытых файлов система не даст открыть.
2) [code lang=asm]CSEG segment assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG org 100h Begin:[/code] Эти строки - директивы компилятора, они участвуют только в процессе создания кода:, - 1) описывает сегмент памяти как отдельный логический блок, это сокращенная запись от записи: имя_сегмента segment readonly выравнивание. тип разряд 'класс' имя_сегмента segment - сокращенная запись; readonly - опция директивы, которая, заставляет MASM(другим без разницы) выдавать сообщение о попытке записи в этот сегмент; выравнивание - опция указывающая компилятору с какого адреса может начинаться сегмент, обычно PARA - 16-ть байт, т.к. меньше не имеет смысла из-за особенностей формирования физического адреса; тип - опция, которая указывает можно ли и как комбинировать сегменты между собой; разряд - 16-ть или 32-а битный сегмент; 'класс' - может быть любое имя в кавычках, все сегменты с одинаковым классом, будут расположены друг за другом; - 2) указывает компилятору, что данный сегментный регистр связывается с таким-то сегментом или группой сегментов; - 3) указывает компилятору, с какого адреса генерировать код.
Сейчас используется упрощенные директивы: .CODE, .DATA, .STACK, вместе с указанием модели памяти: .MODEL TINY | SMALL | FLAT.
В памяти от 0h до 0FFh находится префикс программы, для данной модели памяти(tiny) он одинаков для всех сом-файлов и подставляется автоматически системой. Это сложилось исторически, когда компьютеры были маленькие и места чтобы хранить в каждой программе аж 256 байт не было.
В данной строке вычисляется длина самого кода, от последнего адреса программы вычитается длина префикса программы(см. выше).
3) Вместе с префиксом программ система ещё защищает себя, она автоматически в стек записывает код 0х0000, когда клавиатурный маньяк случайно завалит стек и очередной раз выполнит команду RET, то управление получит код по адресу CS : 0000, а там команда INT 20h.
Удачи!
5
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
1) спасибо большое за Ваши ценные сообщения-консультации. уверен, что они (консультации) обязательно пригодятся мне в будущем. полагаю, что у меня в дальнейшем-будущем возникнут вопросы по БИОС и ОС (любой) и по их дизайну и разработке. но к этому мне нужно идти последовательно-постепенно, начиная с простого и затем постепенно усложняя материал-информацию.
2) пока же я продолжу изучать книгу О.А.Калашникова для практики и набиванию-тренировке своих рук по Ассемблеру MASM.
3) Константин Николаевич, я сожалею, что мои профессиональные навыки по атомной и лазерной физике не нужны в настоящее время и, также, мой научный труд практически не оплачивается ни в России, ни на Западе. однако ничего не поделаешь - приходится переучиваться с нуля для того чтобы в дальнейшем встать на уровень профессиональных решений низкоуровневого программирования и работы с "железом", включая электронику-схемотехнику.
4) Константин Николаевич, как специалист по военной электронике, можете ли Вы порекомендовать мне Форум(ы) для новичков (начиная с азов - как функционируют транзисторы и диоды, рабочая точка транзисторов, зачем нужна стабилизация по току и т.д.) для обсуждения вопросов по электронике-схемотехнике ?
Спасибо, еще раз, за Ваши консультации и Ваше взаимопонимание.
Форма ответа
Отправка постов/ответов доступна только зарегистрированным и подтвержденным пользователям.
{"canUserNotesAccess":false,"canUserAdminsNotesAccess":false,"canAskQuestion":false,"canEditQuestions":false,"canSeeQuestionsComplains":false,"isSuperAdmin":false,"isAdmin":false,"isModer":false,"canCreateNewUser":false,"canConfirmUser":false,"canEditUserName":false,"canEditUserRole":false,"canEditUserEmail":false,"canEditUserPhone":false,"canEditUserBirthdate":false,"canEditUserCountry":false,"canEditSocialMedia":false,"canDeleteUserPhoto":false,"canDeleteUser":false,"canEditUserAbout":false,"canBanUser":false,"canResetUserPassword":false,"canEditRegistDate":false,"canChangeUserRating":false,"canAccessToAdmin":false,"canAnnouncements":false,"canManageQuestionPosts":false,"canManageForumSections":false,"canManageForumThreads":false,"canManageForumPosts":false,"canCreateForumThreads":false,"canSeeUserEmail":false,"canSeeUserPhone":false,"canSeeIPAddress":false,"canSeeUserRegistDate":false,"canSeeUserSocialMedia":false,"canSeeBirthDate":false,"canSeeUserCountry":false,"canSeeUserSettings":false,"canSeeDeletedPosts":false,"isEmailConfirmed":false,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":0,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-55 мин."},"isBanned":false,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","socialMedia":[],"aboutText":"","aboutHTML":"","signatureText":"","signatureHTML":"","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":0,"absoluteRating":0,"dynamicRating":0,"dynamicRatingStars":0,"timezone":{"id":283,"baseUtcOffset":"03:00:00","displayName":"(UTC\u002B03:00) Москва","linuxid":"Europe/Moscow"},"currentDateTime":"2024-03-29T14:55:36.4329767+03:00","isValid":false,"isUnconfirmed":true,"isConfirmed":false,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":1,"counters":{"daysAtPortal":0,"questions":0,"questionsPosts":0,"questionsAnswers":0,"questionsPostsEvaluations":0,"forumPosts":0},"isRfproUserClass":true,"id":0,"name":"Неизвестный","email":"","role":0,"registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.11","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.11","photoPreview120":"images/unophoto.png?v=9.4.11","photoPreview100":"images/unophoto.png?v=9.4.11","photoPreview80":"images/unophoto.png?v=9.4.11","photoPreview40":"images/unophoto.png?v=9.4.11","isPhotoExists":false,"isLoggedIn":false,"isNewUser":false,"isExisted":false,"isExpert":false}