Initial data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 72d218235f
commit f23f22d71c
199087 changed files with 3378941 additions and 0 deletions

View file

@ -0,0 +1,12 @@
// http://stackoverflow.com/questions/3385515/static-assert-in-c
#define STATIC_ASSERT(COND,MSG) typedef char static_assertion_##MSG[(!!(COND))*2-1]
// token pasting madness:
#define COMPILE_TIME_ASSERT3(X,L) STATIC_ASSERT(X,static_assertion_at_line_##L)
#define COMPILE_TIME_ASSERT2(X,L) COMPILE_TIME_ASSERT3(X,L)
#define COMPILE_TIME_ASSERT(X) COMPILE_TIME_ASSERT2(X,__LINE__)
COMPILE_TIME_ASSERT(sizeof(long)==8);
int main()
{
COMPILE_TIME_ASSERT(sizeof(int)==4);
}

View file

@ -0,0 +1,9 @@
//requires C99
#define ITERATE_LIST(n, list) \
for(Node *n = (list)->head; n; n = n->next)
...
ITERATE_LIST(n, list)
{
printf("node value: %s\n", n->value);
}

View file

@ -0,0 +1,3 @@
#define my_min(x, y) ((x) < (y) ? (x) : (y))
...
printf("%f %d %ll\n", my_min(0.0f, 1.0f), my_min(1,2), my_min(1ll, 2ll));

View file

@ -0,0 +1,45 @@
#define Str_init(_V_) char * _V_=NULL;
#define Free_secure(_X_) if(_X_) { free(_X_); _X_=NULL; }
#define Let(_X_,_Y_) \
do{\
if(_X_) free(_X_);\
int len = strlen(_Y_);\
_X_ = (char*)calloc( len + 1, 1);\
if(_X_) { memcpy(_X_, _Y_, len); }\
else { perror("\033[38;5;196mLet: No hay memoria para <"#_X_">(CALLOC)\n\033[0m"); }\
}while(0);
/* inicia el trabajo con el stack */
#define Stack if( (PILA_GADGET = 1) )
/* finaliza el trabajo con el stack. La pila debe quedar en "0" */
#define Stack_off \
PILA_GADGET = 0; \
if(CONTADOR_PILA>=0){ Msg_red("Proceso termina con stack ocupado: borro sobrante\n");\
CONTADOR_PILA=-1; }
/*
STORE almacena el valor en la variable indicada, obtenido desde el
stack. */
#define Store(_X_,_Y_) \
do{\
_Y_;\
if(PILA_GADGET){\
if( CONTADOR_PILA>=0 ){\
Let(_X_, pila_de_trabajo[CONTADOR_PILA]);CONTADOR_PILA--;\
}\
}else{ Msg_amber("Store: No hay datos en la pila");}\
}while(0);
...
#define Main \
int main(int argc, char* argv[]){\
__TOKEN__=NULL;\
Init_token();\
Init_stack;
/* SALIDA NORMAL */
#define End End_token(); \
Free_stack_str;\
return(0); }

View file

@ -0,0 +1,21 @@
#include <gadget/gadget.h>
LIB_GADGET_START
Main
String w, v="María tenía un corderito";
Stack{
Store( v, Substr(v, Str_at("tenía",v),Str_len( Upper(v) )) );
Store( v, Trim(Left( Upper(v), Str_at("CORDERITO",Upper(v))-1)));
}Stack_off;
Print "msg stack : [%s]\n\n", v;
Let( v, "María tenía un corderito");
/* Str_len() sirve sin stack, pero en este caso es mejor usar strlen() de C. */
w = Substr(v, Str_at("tenía",v),Str_len(v));
Print "msg normal: %s\n", w;
Free secure w,v;
End

View file

@ -0,0 +1,3 @@
#define Throw(_X_) if( !Is_ok ) { goto _X_; }
#define Exception(_H_) _H_: if( !Is_ok++ )
#define Assert(_X_,_Y_) if( !(_X_) ) { Is_ok=0; goto _Y_; }

View file

@ -0,0 +1,19 @@
#include <gadget/gadget.h>
LIB_GADGET_START
Main
int retVal=0;
Assert( Arg_count == 2, fail_input );
Get_arg_str( filename, 0 );
Get_arg_float( number, 1 );
Print "First argument (filename) = %s\n", filename;
Print "Second argument (a number) = %f\n", number;
Free secure filename;
Exception( fail_input ){
Msg_yellow("Use:\n ./prog <number>\n");
retVal=1;
}
Return( retVal );

View file

@ -0,0 +1,35 @@
/* declara un array vacío */
#define New_mt_array(_X_) \
MT_CELL *_X_ = NULL;\
Define_New_Array(_X_)\
_X_##_data.type = MULTI_TYPE;
....
/* acceso a celdas string */
#define sCell(_X_,...) CONCAT2(Cell_mtstr, COUNT_ARGUMENTS(__VA_ARGS__))(_X_, ##__VA_ARGS__)
#define Cell_mtstr1(_X_,ARG1) (_X_[ ARG1 ].value)
#define Cell_mtstr2(_X_,ARG1,ARG2) (_X_[ ( ARG1 ) * ( _X_##_data.cols ) + ( ARG2 ) ].value)
#define Cell_mtstr3(_X_,ARG1,ARG2,ARG3) (_X_[ ( ( ARG1 ) * ( _X_##_data.cols ) + ( ARG2 ) ) + \
( ARG3 ) * ( _X_##_data.cols * _X_##_data.rows ) ].value)
...
/* acceso a celdas long */
#define lCell(_X_,...) CONCAT2(Cell_mtlng, COUNT_ARGUMENTS(__VA_ARGS__))(_X_, ##__VA_ARGS__)
#define Cell_mtlng1(_X_,ARG1) *((long *)(_X_[ ARG1 ].value))
#define Cell_mtlng2(_X_,ARG1,ARG2) *((long *)(_X_[ ( ARG1 ) * ( _X_##_data.cols ) + ( ARG2 ) ].value))
#define Cell_mtlng3(_X_,ARG1,ARG2,ARG3) *((long *)(_X_[ ( ( ARG1 ) * ( _X_##_data.cols ) + ( ARG2 ) ) + \
( ARG3 ) * ( _X_##_data.cols * _X_##_data.rows ) ].value))
...
/* RANGOS para acceso iterado */
#define Range_for(_X_, ...) CONCAT2(Range_for, COUNT_ARGUMENTS(__VA_ARGS__))(_X_, ##__VA_ARGS__)
/* para un array 1D */
#define Range_for3(_X_,A1,A2,A3) \
_X_##_data.rowi=A1;_X_##_data.rowinc=A2;_X_##_data.rowe=A3;
/* para un array 2D */
#define Range_for6(_X_,A1,A2,A3,B1,B2,B3) \
_X_##_data.rowi=A1;_X_##_data.rowinc=A2;_X_##_data.rowe=A3; \
_X_##_data.coli=B1;_X_##_data.colinc=B2;_X_##_data.cole=B3;
....

View file

@ -0,0 +1,68 @@
#include <gadget/gadget.h>
LIB_GADGET_START
void Muestra_archivo_original();
Main
Assert (Exist_file("load_matrix.txt"), file_not_found);
/* recupero informacion del archivo para su apertura segura */
F_STAT dataFile = Stat_file("load_matrix.txt");
Assert (dataFile.is_matrix, file_not_matrixable) // tiene forma de matriz???
New multitype test;
/* The data range to be read is established.
It is possible to read only part of the file using these ranges. */
Range for test [0:1:dataFile.total_lines-1, 0:1:dataFile.max_tokens_per_line-1];
/* cargamos el array detectando números enteros como long */
test = Load_matrix_mt( pSDS(test), "load_matrix.txt", dataFile, DET_LONG);
/* modifica algunas cosas del archivo */
Let( $s-test[0,1], "Columna 1");
$l-test[2,1] = 1000;
$l-test[2,2] = 2000;
/* inserto filas */
/* preparo la fila a insertar */
New multitype nueva_fila;
sAppend_mt(nueva_fila,"fila 3.1"); /* sAppend_mt() and Append_mt() are macros */
Append_mt(nueva_fila,float,0.0);
Append_mt(nueva_fila,int,0);
Append_mt(nueva_fila,double,0.0);
Append_mt(nueva_fila,long, 0L);
/* insertamos la misma fila en el array, 3 veces */
test = Insert_row_mt(pSDS(test),pSDS(nueva_fila), 4);
test = Insert_row_mt(pSDS(test),pSDS(nueva_fila), 4);
test = Insert_row_mt(pSDS(test),pSDS(nueva_fila), 4);
Free multitype nueva_fila;
Print "\nGuardando archivo en \"save_matrix.txt\"...\n";
DEC_PREC = 20; /* establece precision decimal */
All range for test;
Save_matrix_mt(SDS(test), "save_matrix.txt" );
Free multitype test;
Print "\nArchivo original:\n";
Muestra_archivo_original();
Exception( file_not_found ){
Msg_red("File not found\n");
}
Exception( file_not_matrixable ){
Msg_red("File is not matrixable\n");
}
End
void Muestra_archivo_original(){
String csys;
csys = `cat load_matrix.txt`;
Print "\n%s\n", csys;
Free secure csys;
}