Главная страница


ru.unix

 
 - RU.UNIX ----------------------------------------------------------------------
 From : Dennis Chikin                        2:5054/4.2     13 Dec 2003  00:58:10
 To : Valentin Nechayev
 Subject : ДАВАЙТЕ УТОЧHИМ!
 -------------------------------------------------------------------------------- 
 
 
 Thursday December 11 2003 22:48, you wrote to me:
 
  DC>> Это не левая библиотека, а полтора десятка макросов, которые
  DC>> один раз пишутся под себя, немножко подумав головой на предмет
  DC>> "а как бы это было лично мне удобно"
 
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
  VN> Даже если это один макрос - это левая библиотека.
  VN> Или публикуй, что в них и почему они такие, или не морочь голову.
 
 Было бы там чего показывать...
 Основная идея - данные куда угодно, только не в стек, malloc() и free() руками
 не трогать, пересылки - только из меньшего куска в больший, аргументы и возврат 
 проверять на осмысленность, fread/fwrite( {}, 3, {}, {}) не делать.
 Примерно так:
 
 === Cut ===
 typedef struct { int grp; int num; } t0000s_fnum;
 typedef struct { int page; int offs; } t0001s_data;
 typedef struct { t0000s_fnum f_num;
                  union { t0001s_data block; void *pointer; char data; } data;
                } t0002s_farg;
 #define F_NUM f_num.num
 #define F_GRP f_num.grp
 #define D_PTR data.pointer
 #define D_NUM data.block.offs
 #define D_GRP data.block.page
 #define D_DAT data.data
 
 #define SRC_PTR t0002s_farg *dst, t0002s_farg *src
 #define DST_PTR t0002s_farg *dst, t0002s_farg *src
 #define SRC_ADR dst, src
 #define DST_ADR dst, src
 #define F_ARG t0002s_farg
 #define F_DECL F_ARG *
 
 #define D_DECL(vname) F_ARG vname /* obsolete ! */
 #define D_INIT(vptr, sample) (*vptr).F_NUM = sizeof(sample);\
    (*vptr).F_GRP = 0; (*vptr).D_PTR = sample
 
 extern F_DECL f_call ( int idgrp, int idnum, DST_PTR );
 
 /* I1MDISP - allocate the memory block
 /*    (*src).F_NUM  - size; if src == NULL - max. possible size
 /* if dst != NULL  - insert into a chain after (*dst).D_PTR)
 /*      dst must be already packed or will be lost;
 /* I1MFREE - free the memory block
 /*    src   - unpacked memory block
 /*    dst   - a descriptor of the memory block;
 /* I1MPACK - pack the memory block
 /*    src   - unpacked memory block;
 /* if dst != NULL  - pack into the chain (don't create new descriptor);
 /* I1MUNPK - unpack the memory block
 /*         src           - packed memory block;
 /* if dst != NULL  - a descriptor (block must be free or packed);
 === Cut ===
 
 И так далее. Hу и таки да, есть 200 строк примерно в таком духе:
 
 === Cut ===
 extern int coreerr( void );
 extern int f_callog( SRC_PTR );
 extern FILE *v0005f_errfp;
 extern F_DECL f1end( SRC_PTR );
 
 struct fn_head { F_DECL ( *addr )( SRC_PTR ); char *name; };
 
 #include<bureau\f1ptr.lst>
 #include<bureau\f2ptr.lst>
 ...
 
 struct fn_head (*f_ptr[])[] =
  {
  NULL,
  &f1ptr,
  &f2ptr,
  ...
  };
 
 F_DECL f_call( int idgrp, int idnum, DST_PTR )
 
  {
 static F_ARG *result, *sptr;
  t0000s_fnum old;
 
  #ifdef INTERNAL_LOG
  if ( ( v0003w_logmode & LMODE_C ) )
    {
    LOGBLANK;
    fprintf( v0004f_logfp, "%s%06d%c%06d%s%06d%c%06d%s%s%s",
      "call ", idgrp, ':', idnum, " from ",
      v0000s_pdiag.fnum.now.grp, ':',
      v0000s_pdiag.fnum.now.num,
      "    (", (*(f_ptr[idgrp]))[idnum].name, ")\n");
    f_callog( SRC_ADR );
    };
  #endif
  if ( ( !( idgrp ) ) && (src != NULL ) )
    {
    idgrp = (*src).F_GRP;
    idnum = (*src).F_NUM;
    sptr = src++;
    }
  else sptr = src;
 
  if ( !( idgrp ) ) return ( NULL );
 /* много проверок повырезано нафиг */
 ...
 
  #ifdef INTERNAL_LOG
  v0002w_clevel++;
  #endif
  result = (*(f_ptr[idgrp]))[idnum].addr( dst, sptr );
  if ( v0000s_pdiag.error.level ) coreerr();
 
 /* немножко логов отправилось туда же*/
 ...
 
  return ( result );
  }
 
 === Cut ===
 
 Да, я знаю, что по этому поводу сказал бы Луговский, но как на заре юности было 
 написано, с тех пор и работает. Для обнаружить забытые скобочки в char s = "";
 хватает, переполняться нечему.
 
 P.S. А массивы и циклы, прописанные явным образом, таки все равно лучше.
 
 Вишен и прочих кактусов.
 
 --- глаза брата келаря 3.0.1 шт.
  * Origin: И ныне, и присно, и до инструкции HLT !  Reset... (2:5054/4.2)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: ДАВАЙТЕ УТОЧHИМ!   Artem Chuprina   29 Nov 2003 22:53:52 
 Re: ДАВАЙТЕ УТОЧHИМ!   Denis Bolotnov   30 Nov 2003 03:04:09 
 Re: ДАВАЙТЕ УТОЧHИМ!   Ilyak Kaznacheev   30 Nov 2003 03:20:37 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Nechayev   30 Nov 2003 03:50:41 
 Re: ДАВАЙТЕ УТОЧHИМ!   Ivan Frolcov   30 Nov 2003 05:03:38 
 Re: ДАВАЙТЕ УТОЧHИМ!   Artem Chuprina   30 Nov 2003 13:05:55 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Davydov   04 Dec 2003 10:53:35 
 ДАВАЙТЕ УТОЧHИМ!   Dennis Chikin   04 Dec 2003 22:12:02 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Nechayev   05 Dec 2003 00:14:12 
 ДАВАЙТЕ УТОЧHИМ!   Dennis Chikin   06 Dec 2003 14:25:29 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Nechayev   09 Dec 2003 22:46:54 
 ДАВАЙТЕ УТОЧHИМ!   Dennis Chikin   11 Dec 2003 23:27:13 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Nechayev   11 Dec 2003 23:48:23 
 Re: ДАВАЙТЕ УТОЧHИМ!   Anatoliy Dmytriyev   12 Dec 2003 01:52:35 
 ДАВАЙТЕ УТОЧHИМ!   Dennis Chikin   13 Dec 2003 00:58:10 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Davydov   08 Dec 2003 10:48:19 
 Re: ДАВАЙТЕ УТОЧHИМ!   Ilyak Kaznacheev   08 Dec 2003 18:21:42 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Davydov   10 Dec 2003 08:55:08 
 Re: ДАВАЙТЕ УТОЧHИМ!   Ilyak Kaznacheev   10 Dec 2003 17:09:48 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Davydov   11 Dec 2003 19:24:52 
 Re: ДАВАЙТЕ УТОЧHИМ!   mitrohin a.s.   12 Dec 2003 09:01:30 
 ДАВАЙТЕ УТОЧHИМ!   Dennis Chikin   09 Dec 2003 01:21:21 
 ДАВАЙТЕ УТОЧHИМ!   Max Khon   10 Dec 2003 22:52:56 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Davydov   11 Dec 2003 19:24:52 
 ДАВАЙТЕ УТОЧHИМ!   Dennis Chikin   13 Dec 2003 00:36:15 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Davydov   14 Dec 2003 20:18:39 
 ДАВАЙТЕ УТОЧHИМ!   Dennis Chikin   16 Dec 2003 20:48:56 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Nechayev   09 Dec 2003 22:44:53 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Davydov   11 Dec 2003 19:24:53 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Nechayev   12 Dec 2003 11:28:44 
 Re: ДАВАЙТЕ УТОЧHИМ!   Valentin Davydov   14 Dec 2003 20:18:36 
Архивное /ru.unix/22443fda5c14.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional