Dirty laundry, chickenpox and chrysanthemum. In case of Amnesia: Mr.Harmonies Memory Database.
Selasa, 9 Oktober 2012
#17: 8 month gaps.
Lama dok update blog....
Banyak perkara berlaku dalam tempoh "gap" antara post #16 dan #17. Lebih 8 bulan gap antara 2 post ini. Antara perkara-perkara besar yang berlaku pada saya dalam tempoh ini:
Banyak perkara berlaku dalam tempoh "gap" antara post #16 dan #17. Lebih 8 bulan gap antara 2 post ini. Antara perkara-perkara besar yang berlaku pada saya dalam tempoh ini:
- Perpindahan saya dari Johor Bahru ke Kuala Lumpur. Saya ada memohon untuk pertukaran antara JKN untuk perpindahan ke lokasi yang lebih dekat dengan isteri saya pada bulan April dan Alhamdulillah pertukaran saya diluluskan pada bulan Jun (satu tempoh pemprosesan pertukaran yang sangat singkat pada pendapat saya, taniah KKM!). Alhamdulillah juga, penempatan tempat kerja baru saya juga agak dekat dari tempat tinggal saya. Double WIN!
- Kelahiran Omar Shahnaz. Omar Shahnaz, anak sulung saya lahir pada 23/9/2012 pada 9:05 pagi di Hospital Bersalin, Hospital Kuala Lumpur. Saya amat certain dengan waktu (9:05am) ini kerana sebenarnya saya telah memohon untuk mengiringi isteri saya ke labour room dan menempuhi proses labour bersama isteri saya. Saya akan menulis satu post baru yang lebih detail mengenai ini.
Rabu, 8 Februari 2012
#16: +ve!
Wa mini. Lumix GF-2. 14mm f2.5 pancake kit lens. On CNY 2012 eve. |
Waktu itu masih tak tahu.Proudly announcing, wa mini dah pregnant! Alhamdulillah, Allah maha kaya! :)
Uwek sana, uwek sini.
Bila masa dah tahu,
Masih uwek sana, uwek sini.
- Pantun Mr. Harmonies
Wa mini. Lumix GF-2. 14mm f2.5 pancake kit lens. On CNY 2012 eve. |
To be continued..
Tags:
lumix gf-2,
mengandung,
pregnant,
sarimah,
wife
Khamis, 19 Januari 2012
#15: Spiral Bokehland
Khamis, 12 Januari 2012
#14: Getting lucky. Spotted an error in crp.h
Project Coco/R sepatutnya project yang sgt portable kerana kodnya langsung tak target untuk specific platform. Akan tetapi beberapa hari lepas, saya telah cuba untuk compile Coco/R dari source code menggunakan gcc versi 4.6.1 (pakej compiler mingw) dan ia berakhir dengan error (gcc invoked dengan gcc -c -w crp.c)
Saya cuba untuk compile COLLECT.C, CR.C, CRA.C, CRF.C, CRP.C, CRS.C, CRT.C, CRX.C dan SET.C, dan saya dapati satu-satunya kod yang bermasaalah adalah CRP.C. Saya mati akal untuk membetulkan source code ini. Sebab crp.c adalah kod C yang sempurna di Linux Mint 12. Akhirnya saya mengambil keputusan untuk compile crp.c dengan menggunakan Tiny C Compiler. Invoked tcc -c crp.c dan tcc memberikan error ini:
Buntu mencari penyelesaian, saya cuba pula mencari consultation melalui IRC di server IRC Linux Mint. Di server berkenaan ada satu channel bernama "#mingw" dan ia rupanya satu channel unofficial bagi project MingW. Saya cuba menanyakan soal ini di channel berkenaan dan beberapa orang tampil untuk membantu. Ada juga yang menanyakan tentang Coco/R sendiri, kerana ia satu project yang tidak famous berbanding project lain. Coco/R adalah satu program untuk menghasilkan compiler lain. Ia seperti tool lex dan yacc bersama dalam satu pakej. Malang sekali, tak ada penyelesaian dapat dicapai dalam sesi consultation tersebut. Cuma saya dinasihatkan untuk examine kod crp.c tersebut dalam bentuk yang dah di preprocessed. Saya invoke lagi gcc -E -o crp-pre.c crp.c untuk mendapatkan output crp.c yang dah di preprocessed. Ini adalah crp-pre.c:
Alhamdulillah! :) Terima kasih kerana sudi membaca. Selamat berprogramming!
Error ini memanglah tak sepatutnya keluar. Dan memang error ini langsung tak keluar bila saya compile kod yang sama di Linux Mint 12 (juga menggunakan gcc versi 4.6.1). Ia tercompile dengan sempurna tanpa apa-apa warning di Linux Mint 12. Nasib baik saya invoke gcc diatas dengan -w, kalau tak, console saya dah penuh dengan warning.crp.h:168:6: error: conflicting types for 'SynError'
crp.h:27:6: note: previous declaration of 'SynError' was here
crp.h:178:6: error: conflicting types for 'SemError'
crp.h:30:6: note: previous declaration of 'SemError' was here
Saya cuba untuk compile COLLECT.C, CR.C, CRA.C, CRF.C, CRP.C, CRS.C, CRT.C, CRX.C dan SET.C, dan saya dapati satu-satunya kod yang bermasaalah adalah CRP.C. Saya mati akal untuk membetulkan source code ini. Sebab crp.c adalah kod C yang sempurna di Linux Mint 12. Akhirnya saya mengambil keputusan untuk compile crp.c dengan menggunakan Tiny C Compiler. Invoked tcc -c crp.c dan tcc memberikan error ini:
crp.c:147: incompatible types for redefinition of 'SynError'Masaalah sama. Ia tentang types dan tentang "SynError" (juga "SemError", tapi tcc tak dapat detect error ini. gcc walaubagaimanapun dapat detect masaalah symbol "SemError"). Nampaknya ia bukan masaalah compiler MingW lagi kerana kedua-dua compiler gcc dan tcc dapat detect error yang sama.
Buntu mencari penyelesaian, saya cuba pula mencari consultation melalui IRC di server IRC Linux Mint. Di server berkenaan ada satu channel bernama "#mingw" dan ia rupanya satu channel unofficial bagi project MingW. Saya cuba menanyakan soal ini di channel berkenaan dan beberapa orang tampil untuk membantu. Ada juga yang menanyakan tentang Coco/R sendiri, kerana ia satu project yang tidak famous berbanding project lain. Coco/R adalah satu program untuk menghasilkan compiler lain. Ia seperti tool lex dan yacc bersama dalam satu pakej. Malang sekali, tak ada penyelesaian dapat dicapai dalam sesi consultation tersebut. Cuma saya dinasihatkan untuk examine kod crp.c tersebut dalam bentuk yang dah di preprocessed. Saya invoke lagi gcc -E -o crp-pre.c crp.c untuk mendapatkan output crp.c yang dah di preprocessed. Ini adalah crp-pre.c:
# 1 "crp.c" # 1 "Long story shorts, saya spotted error dari declaration SynError dan SemError. Ia di declared sebagai void SynError(int errno); untuk SynError dan void SemError(int errno); untuk SemError. Bagi saya yang baru didalam C ini, saya kurang memahami tentang apa masaalah disini, cuma saya hanya tahu, declaration dalam file header mestilah sama dengan assignment (saya belajar ini dari pengalaman dengan Pascal). Contohnya SynError dideclare void SynError(int errno); tapi di dalam crp.c, ia function SynError digunakan sebagai void SynError(int (*_errno())). The "*" dan "_" missing. Jeng jeng jeng.. Saya kemudian mengubah crp.h dengan mengantikan void SynError(int errno); kepada void SynError(int (*_errno())); dan void SemError(int errno); kepada void SemError(int (*_errno()));. Guess what, gcc dan even tcc telah berjaya compile crp.c dan berjaya link semua object lain membentuk file cocor.exe! I'm actually spotted error yang susah nak ditemui hurray! Ini adalah crp.h dengan modifikasi dari saya:" # 1 " " # 1 "crp.c" # 11 "crp.c" # 1 "crs.h" 1 # 14 "crs.h" # 1 "crc.h" 1 # 15 "crs.h" 2 # 23 "crs.h" extern int S_src; extern int S_Line, S_Col; extern int S_Len; extern long S_Pos; extern int S_NextLine; extern int S_NextCol; extern int S_NextLen; extern long S_NextPos; extern int S_CurrLine; extern long S_lineStart; int S_Get(void); void S_Reset(void); void S_GetString(long pos, int len, char *s, int max); void S_GetName(long pos, int len, char *s, int max); unsigned char S_CurrentCh(long pos); # 12 "crp.c" 2 # 1 "crp.h" 1 # 14 "crp.h" typedef void (*Error_Func) (int nr, int line, int col, long pos); void Parse(void); int Successful(void); void SynError(int errno); void SemError(int errno); # 13 "crp.c" 2 # 1 "crt.h" 1 # 1 "collect.h" 1 typedef void (*Collection_FuncPos) (void *object, int pos); typedef void (*Collection_Func) (void *object); typedef int (*Collection_Comp) (void *object, void *data); typedef struct { int el_size; int n_ext; int size; int el_free; char *data; } Collection; typedef Collection *PCollection; void Collection_Init(PCollection Col, int elem_s, int size, int extend); void Collection_Done(PCollection Col); void Collection_Clean(PCollection Col); int Collection_New(PCollection Col); int Collection_Count(PCollection Col); void *Collection_At(PCollection Col, int pos); void Collection_Get(PCollection Col, int pos, void *data); void Collection_Put(PCollection Col, int pos, void *data); void Collection_ForEach(PCollection Col, Collection_Func fn); void Collection_ForEachPos(PCollection Col, Collection_FuncPos fn); int Collection_FirstThat(PCollection Col, Collection_Comp fn, void *data); # 4 "crt.h" 2 # 1 "set.h" 1 typedef void (*Set_Func) (int object); typedef struct { int size; unsigned short int *data; } Set; typedef Set * PSet; void Set_Init(PSet set); void Set_Done(PSet set); void Set_Clean(PSet set); void Set_AddItem(PSet set, int n); void Set_DelItem(PSet set, int n); int Set_IsItem(PSet set, int n); int Set_MaxIndex(PSet set); int Set_MinIndex(PSet set); void Set_GetRange(PSet set, int *s, int *f); int Set_Elements(PSet set); int Set_Empty(PSet set); void Set_ForEach(PSet set, Set_Func fn); void Set_Union(PSet set1, PSet set2); void Set_Copy(PSet set1, PSet set2); void Set_Diference(PSet set1, PSet set2); void Set_Intersect(PSet set1, PSet set2); void Set_AddRange(PSet set, int start, int end); void Set_DelRange(PSet set, int start, int end); int Set_Equal(PSet set1, PSet set2); int Set_Diferent(PSet set1, PSet set2); int Set_Includes(PSet set, PSet set2); void Set_PrintInt(PSet set); void Set_PrintChar(PSet set); # 5 "crt.h" 2 # 1 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 1 3 # 19 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 # 1 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/_mingw.h" 1 3 # 32 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/_mingw.h" 3 # 33 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/_mingw.h" 3 # 20 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 2 3 # 1 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/include/stddef.h" 1 3 4 # 212 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/include/stddef.h" 3 4 typedef unsigned int size_t; # 324 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/include/stddef.h" 3 4 typedef short unsigned int wchar_t; # 353 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/include/stddef.h" 3 4 typedef short unsigned int wint_t; # 27 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 2 3 # 1 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/include/stdarg.h" 1 3 4 # 40 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/include/stdarg.h" 3 4 typedef __builtin_va_list __gnuc_va_list; # 29 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 2 3 # 129 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 typedef struct _iobuf { char* _ptr; int _cnt; char* _base; int _flag; int _file; int _charbuf; int _bufsiz; char* _tmpfname; } FILE; # 154 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 extern __attribute__ ((__dllimport__)) FILE _iob[]; # 169 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fopen (const char*, const char*); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) freopen (const char*, const char*, FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fflush (FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fclose (FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) remove (const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) rename (const char*, const char*); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) tmpfile (void); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) tmpnam (char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _tempnam (const char*, const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _rmtmp(void); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _unlink (const char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) tempnam (const char*, const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) rmtmp(void); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) unlink (const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) setvbuf (FILE*, char*, int, size_t); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) setbuf (FILE*, char*); # 204 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 extern int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __mingw_fprintf(FILE*, const char*, ...); extern int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __mingw_printf(const char*, ...); extern int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __mingw_sprintf(char*, const char*, ...); extern int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __mingw_snprintf(char*, size_t, const char*, ...); extern int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __mingw_vfprintf(FILE*, const char*, __gnuc_va_list); extern int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __mingw_vprintf(const char*, __gnuc_va_list); extern int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __mingw_vsprintf(char*, const char*, __gnuc_va_list); extern int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __mingw_vsnprintf(char*, size_t, const char*, __gnuc_va_list); # 293 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fprintf (FILE*, const char*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) printf (const char*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) sprintf (char*, const char*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vfprintf (FILE*, const char*, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vprintf (const char*, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vsprintf (char*, const char*, __gnuc_va_list); # 308 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __msvcrt_fprintf(FILE*, const char*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __msvcrt_printf(const char*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __msvcrt_sprintf(char*, const char*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __msvcrt_vfprintf(FILE*, const char*, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __msvcrt_vprintf(const char*, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __msvcrt_vsprintf(char*, const char*, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _snprintf (char*, size_t, const char*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _vsnprintf (char*, size_t, const char*, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _vscprintf (const char*, __gnuc_va_list); # 331 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) snprintf (char *, size_t, const char *, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vsnprintf (char *, size_t, const char *, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vscanf (const char * __restrict__, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vfscanf (FILE * __restrict__, const char * __restrict__, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vsscanf (const char * __restrict__, const char * __restrict__, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fscanf (FILE*, const char*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) scanf (const char*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) sscanf (const char*, const char*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fgetc (FILE*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fgets (char*, int, FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fputc (int, FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fputs (const char*, FILE*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) gets (char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) puts (const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) ungetc (int, FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _filbuf (FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _flsbuf (int, FILE*); extern __inline__ int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) getc (FILE* __F) { return (--__F->_cnt >= 0) ? (int) (unsigned char) *__F->_ptr++ : _filbuf (__F); } extern __inline__ int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) putc (int __c, FILE* __F) { return (--__F->_cnt >= 0) ? (int) (unsigned char) (*__F->_ptr++ = (char)__c) : _flsbuf (__c, __F); } extern __inline__ int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) getchar (void) { return (--(&_iob[0])->_cnt >= 0) ? (int) (unsigned char) *(&_iob[0])->_ptr++ : _filbuf ((&_iob[0])); } extern __inline__ int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) putchar(int __c) { return (--(&_iob[1])->_cnt >= 0) ? (int) (unsigned char) (*(&_iob[1])->_ptr++ = (char)__c) : _flsbuf (__c, (&_iob[1]));} # 412 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fread (void*, size_t, size_t, FILE*); size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fwrite (const void*, size_t, size_t, FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fseek (FILE*, long, int); long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) ftell (FILE*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) rewind (FILE*); # 455 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 typedef long long fpos_t; int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fgetpos (FILE*, fpos_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fsetpos (FILE*, const fpos_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) feof (FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) ferror (FILE*); # 480 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) clearerr (FILE*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) perror (const char*); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _popen (const char*, const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _pclose (FILE*); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) popen (const char*, const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) pclose (FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _flushall (void); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _fgetchar (void); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _fputchar (int); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _fdopen (int, const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _fileno (FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _fcloseall (void); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _fsopen (const char*, const char*, int); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _getmaxstdio (void); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _setmaxstdio (int); # 522 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fgetchar (void); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fputchar (int); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fdopen (int, const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fileno (FILE*); # 534 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 # 1 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/sys/types.h" 1 3 # 21 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/sys/types.h" 3 # 1 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/include/stddef.h" 1 3 4 # 150 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/include/stddef.h" 3 4 typedef int ptrdiff_t; # 22 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/sys/types.h" 2 3 typedef long __time32_t; typedef long long __time64_t; # 45 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/sys/types.h" 3 typedef __time32_t time_t; typedef long _off_t; typedef _off_t off_t; typedef unsigned int _dev_t; typedef _dev_t dev_t; typedef short _ino_t; typedef _ino_t ino_t; typedef int _pid_t; typedef _pid_t pid_t; typedef unsigned short _mode_t; typedef _mode_t mode_t; typedef int _sigset_t; typedef _sigset_t sigset_t; typedef int _ssize_t; typedef _ssize_t ssize_t; typedef long long fpos64_t; typedef long long off64_t; typedef unsigned int useconds_t; # 535 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 2 3 extern __inline__ FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fopen64 (const char* filename, const char* mode) { return fopen (filename, mode); } int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fseeko64 (FILE*, off64_t, int); extern __inline__ off64_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) ftello64 (FILE * stream) { fpos_t pos; if (fgetpos(stream, &pos)) return -1LL; else return ((off64_t) pos); } # 563 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fwprintf (FILE*, const wchar_t*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wprintf (const wchar_t*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _snwprintf (wchar_t*, size_t, const wchar_t*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vfwprintf (FILE*, const wchar_t*, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vwprintf (const wchar_t*, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _vsnwprintf (wchar_t*, size_t, const wchar_t*, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _vscwprintf (const wchar_t*, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fwscanf (FILE*, const wchar_t*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wscanf (const wchar_t*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) swscanf (const wchar_t*, const wchar_t*, ...); wint_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fgetwc (FILE*); wint_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fputwc (wchar_t, FILE*); wint_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) ungetwc (wchar_t, FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) swprintf (wchar_t*, const wchar_t*, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vswprintf (wchar_t*, const wchar_t*, __gnuc_va_list); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fgetws (wchar_t*, int, FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fputws (const wchar_t*, FILE*); wint_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) getwc (FILE*); wint_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) getwchar (void); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _getws (wchar_t*); wint_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) putwc (wint_t, FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _putws (const wchar_t*); wint_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) putwchar (wint_t); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wfdopen(int, const wchar_t *); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wfopen (const wchar_t*, const wchar_t*); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wfreopen (const wchar_t*, const wchar_t*, FILE*); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wfsopen (const wchar_t*, const wchar_t*, int); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wtmpnam (wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wtempnam (const wchar_t*, const wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wrename (const wchar_t*, const wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wremove (const wchar_t*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wperror (const wchar_t*); FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wpopen (const wchar_t*, const wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) snwprintf (wchar_t* s, size_t n, const wchar_t* format, ...); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __gnuc_va_list arg); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vwscanf (const wchar_t * __restrict__, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vfwscanf (FILE * __restrict__, const wchar_t * __restrict__, __gnuc_va_list); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) vswscanf (const wchar_t * __restrict__, const wchar_t * __restrict__, __gnuc_va_list); # 625 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h" 3 FILE* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wpopen (const wchar_t*, const wchar_t*); wint_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _fgetwchar (void); wint_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _fputwchar (wint_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _getw (FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _putw (int, FILE*); wint_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fgetwchar (void); wint_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fputwchar (wint_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) getw (FILE*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) putw (int, FILE*); # 6 "crt.h" 2 # 20 "crt.h" typedef unsigned char byte; struct SemText{ long pos; int line,len, col; }; typedef char Name[32]; typedef char *PName; # 67 "crt.h" typedef struct { int type; int next; long pointer1; int pointer2; int pointer3; int pointer4; int SLine; } GraphNode; typedef GraphNode *PGraphNode; # 96 "crt.h" int MakeGraph(int type, int sem_link); int MakeSemGraph(int type, long filepos, int len, int line, int col); int MakeGraphOp(int type, int link); int LinkGraph(int current, int next); int LinkAltGraph(int current, int nextalt); void SetGraphLine(int current, int line); void ShowGraph(int graph); void CleanGraphTab(void); typedef struct { Name name; Name gen_name; byte type; } TermNode; typedef TermNode* PTermNode; int FindTerm(PName name); void SetTermName(PTermNode tn); int NewTerm(PName name); void GetTermName(int sp, PName name); void ShowTermTab(void); typedef struct { Name name; Set data; } ClassNode; typedef ClassNode *PClassNode; int FindClass(PName name); int FindClassWithSet(PSet data); int GetClassWithName(PName name, Set *data); int GetClassWithData(PSet data); int NewClass(PName name, PSet set); void ShowClassTab(void); # 151 "crt.h" typedef struct { Set set; byte type; } SymSetNode; typedef SymSetNode *PSymSetNode; int NewSymSet(PSet set, byte typ); int NewANY(void); void GetSymSet(int index, PSet set); void IncludeSymSet(int index, PSet set); void ExcludeSymSet(int index, PSet set); void ShowSymSetTab(void); typedef struct { Name name; int graph; int has_attr; int attr; int sem; int line_dec; int line_use; int nullable; int ready; int reachable; Set first; Set follow; Set AuxNt; } NTermNode; typedef NTermNode *PNTermNode; int FindNTerm(PName name); int NewNTerm(PName name); void ShowNTermTab(void); typedef struct { Name name; int has_attr; struct SemText sem_text; } PragmaNode; typedef PragmaNode *PPragmaNode; int FindPragma(PName name); int NewPragma(PName name); void SetPragmaText(int sp, int gp); void SetupPragmas(void); # 217 "crt.h" typedef struct { Name name; Name user_name; } NameNode; typedef NameNode *PNameNode; int FindName(PName name); void NewName(PName name, PName user_name); void upcase(char *s); void AddIgnore(PSet set); int NewSym(PName name, int typ); int FindSym(PName name, int *typ); void InitTab(void); void DoneTab(void); int IsNullableGraph(int gp); void CompFirstSet(int gp, PSet first); void CompExpected(int gp, int nt, PSet set); void CompFollowNode(int gp, int fgp); void CompSymbolSets(void); void PrintAscii(int s); void PrintInt(int i); void SetOptions(char *s); extern void GenSemError(int nr); extern Collection nterm_tab; extern Collection term_tab; extern Collection nodes_tab; extern Collection class_tab; extern Collection symset_tab; extern Collection pragma_tab; extern Collection name_tab; extern struct SemText global_defs; extern int dirty_DFA; extern int ignore_case; extern int first_weak_set; extern int no_sym; extern FILE *lstfile; extern Set ANY_SET; extern Set ALL_TERMS; extern int C_option; extern int F_option; extern int G_option; extern int L_option; extern int P_option; extern int Q_option; extern int O_option; extern int S_option; extern int T_option; extern int A_option; extern int D_option; extern int Z_option; extern int GenCplusplus; extern char Frames_Path[]; extern char c_ext[]; extern char h_ext[]; # 15 "crp.c" 2 # 1 "crf.h" 1 void GenCode(FILE *out, char *fmt, ...); void SymCharName(unsigned char c, char *asciiname); FILE *OpenFile(char *name, char *opt, int GenError); void InitFrameVars(void); void SetupFrameVars(void); void GenScanner(void); void GenParser(void); void GenHeaders(void); void GenCompiler(void); extern char compiler_name[]; extern char module_prefix[]; extern char source_name[]; # 16 "crp.c" 2 # 1 "cra.h" 1 typedef struct { int type; int sym; int tc; Set to_states; } TransNode; typedef TransNode *PTransNode; typedef struct { Collection trans_list; int end_of; int ctx; int gen_state_no; } StateNode; typedef StateNode *PStateNode; typedef struct { Set set; int state; } MeltedNode; typedef MeltedNode *PMeltedNode; typedef struct { char start_token[3]; char end_token[3]; int nested; } CommentNode; typedef CommentNode *PCommentNode; void NewComment(int start_token, int end_token, int nested); void ShowCommentTab(void); void ConvertToStates(int gp, int sp); int StrToGraph(byte *name); int MatchDFA(byte *str, int sp); int MakeDeterministic(void); void MakeScanner(void); void InitScannerTab(void); void DoneScannerTab(void); void ShowDFA(void); # 17 "crp.c" 2 # 1 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/string.h" 1 3 # 24 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/string.h" 3 # 1 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/include/stddef.h" 1 3 4 # 25 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/string.h" 2 3 # 36 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/string.h" 3 void* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) memchr (const void*, int, size_t) __attribute__ ((__pure__)); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) memcmp (const void*, const void*, size_t) __attribute__ ((__pure__)); void* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) memcpy (void*, const void*, size_t); void* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) memmove (void*, const void*, size_t); void* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) memset (void*, int, size_t); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strcat (char*, const char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strchr (const char*, int) __attribute__ ((__pure__)); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strcmp (const char*, const char*) __attribute__ ((__pure__)); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strcoll (const char*, const char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strcpy (char*, const char*); size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strcspn (const char*, const char*) __attribute__ ((__pure__)); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strerror (int); size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strlen (const char*) __attribute__ ((__pure__)); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strncat (char*, const char*, size_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strncmp (const char*, const char*, size_t) __attribute__ ((__pure__)); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strncpy (char*, const char*, size_t); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strpbrk (const char*, const char*) __attribute__ ((__pure__)); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strrchr (const char*, int) __attribute__ ((__pure__)); size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strspn (const char*, const char*) __attribute__ ((__pure__)); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strstr (const char*, const char*) __attribute__ ((__pure__)); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strtok (char*, const char*); size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strxfrm (char*, const char*, size_t); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _strerror (const char *); void* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _memccpy (void*, const void*, int, size_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _memicmp (const void*, const void*, size_t); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _strdup (const char*) __attribute__ ((__malloc__)); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _strcmpi (const char*, const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _stricmp (const char*, const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _stricoll (const char*, const char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _strlwr (char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _strnicmp (const char*, const char*, size_t); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _strnset (char*, int, size_t); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _strrev (char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _strset (char*, int); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _strupr (char*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _swab (const char*, char*, size_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _strncoll(const char*, const char*, size_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _strnicoll(const char*, const char*, size_t); # 90 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/string.h" 3 void* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) memccpy (void*, const void*, int, size_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) memicmp (const void*, const void*, size_t); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strdup (const char*) __attribute__ ((__malloc__)); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strcmpi (const char*, const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) stricmp (const char*, const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strcasecmp (const char*, const char *); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) stricoll (const char*, const char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strlwr (char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strnicmp (const char*, const char*, size_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strncasecmp (const char *, const char *, size_t); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strnset (char*, int, size_t); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strrev (char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strset (char*, int); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strupr (char*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) swab (const char*, char*, size_t); # 126 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/string.h" 3 wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcscat (wchar_t*, const wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcschr (const wchar_t*, wchar_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcscmp (const wchar_t*, const wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcscoll (const wchar_t*, const wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcscpy (wchar_t*, const wchar_t*); size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcscspn (const wchar_t*, const wchar_t*); size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcslen (const wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsncat (wchar_t*, const wchar_t*, size_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsncmp(const wchar_t*, const wchar_t*, size_t); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsncpy(wchar_t*, const wchar_t*, size_t); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcspbrk(const wchar_t*, const wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsrchr(const wchar_t*, wchar_t); size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsspn(const wchar_t*, const wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsstr(const wchar_t*, const wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcstok(wchar_t*, const wchar_t*); size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsxfrm(wchar_t*, const wchar_t*, size_t); # 152 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/string.h" 3 wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wcsdup (const wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wcsicmp (const wchar_t*, const wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wcsicoll (const wchar_t*, const wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wcslwr (wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wcsnicmp (const wchar_t*, const wchar_t*, size_t); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wcsnset (wchar_t*, wchar_t, size_t); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wcsrev (wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wcsset (wchar_t*, wchar_t); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wcsupr (wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wcsncoll(const wchar_t*, const wchar_t*, size_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wcsnicoll(const wchar_t*, const wchar_t*, size_t); # 173 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/string.h" 3 int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcscmpi (const wchar_t * __ws1, const wchar_t * __ws2); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsdup (const wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsicmp (const wchar_t*, const wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsicoll (const wchar_t*, const wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcslwr (wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsnicmp (const wchar_t*, const wchar_t*, size_t); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsnset (wchar_t*, wchar_t, size_t); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsrev (wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsset (wchar_t*, wchar_t); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcsupr (wchar_t*); # 20 "crp.c" 2 # 1 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 1 3 # 21 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 # 1 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/include/stddef.h" 1 3 4 # 22 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 2 3 # 71 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 extern int _argc; extern char** _argv; extern int* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __p___argc(void); extern char*** __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __p___argv(void); extern wchar_t*** __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __p___wargv(void); # 112 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 extern __attribute__ ((__dllimport__)) int __mb_cur_max; # 137 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 int* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _errno(void); int* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __doserrno(void); # 149 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 extern char *** __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __p__environ(void); extern wchar_t *** __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __p__wenviron(void); # 172 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 extern __attribute__ ((__dllimport__)) int _sys_nerr; # 196 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 extern __attribute__ ((__dllimport__)) char* _sys_errlist[]; # 209 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 extern unsigned __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) int* __p__osver(void); extern unsigned __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) int* __p__winver(void); extern unsigned __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) int* __p__winmajor(void); extern unsigned __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) int* __p__winminor(void); extern __attribute__ ((__dllimport__)) unsigned int _osver; extern __attribute__ ((__dllimport__)) unsigned int _winver; extern __attribute__ ((__dllimport__)) unsigned int _winmajor; extern __attribute__ ((__dllimport__)) unsigned int _winminor; # 260 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 char** __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __p__pgmptr(void); wchar_t** __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __p__wpgmptr(void); # 293 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 extern __attribute__ ((__dllimport__)) int _fmode; # 303 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 double __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) atof (const char*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) atoi (const char*); long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) atol (const char*); double __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wtof (const wchar_t *); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wtoi (const wchar_t *); long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wtol (const wchar_t *); double __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) __strtod (const char*, char**); extern double __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strtod (const char* __restrict__ __nptr, char** __restrict__ __endptr); float __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strtof (const char * __restrict__, char ** __restrict__); long double __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strtold (const char * __restrict__, char ** __restrict__); long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strtol (const char*, char**, int); unsigned long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strtoul (const char*, char**, int); long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcstol (const wchar_t*, wchar_t**, int); unsigned long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcstoul (const wchar_t*, wchar_t**, int); double __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcstod (const wchar_t*, wchar_t**); float __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcstof( const wchar_t * __restrict__, wchar_t ** __restrict__); long double __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wgetenv(const wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wputenv(const wchar_t*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wsearchenv(const wchar_t*, const wchar_t*, wchar_t*); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wsystem(const wchar_t*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wmakepath(wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wsplitpath (const wchar_t*, wchar_t*, wchar_t*, wchar_t*, wchar_t*); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wfullpath (wchar_t*, const wchar_t*, size_t); size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wcstombs (char*, const wchar_t*, size_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wctomb (char*, wchar_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) mblen (const char*, size_t); size_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) mbstowcs (wchar_t*, const char*, size_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) mbtowc (wchar_t*, const char*, size_t); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) rand (void); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) srand (unsigned int); void* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) calloc (size_t, size_t) __attribute__ ((__malloc__)); void* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) malloc (size_t) __attribute__ ((__malloc__)); void* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) realloc (void*, size_t); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) free (void*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) abort (void) __attribute__ ((__noreturn__)); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) exit (int) __attribute__ ((__noreturn__)); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) atexit (void (*)(void)); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) system (const char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) getenv (const char*); void* __attribute__((__cdecl__)) bsearch (const void*, const void*, size_t, size_t, int (*)(const void*, const void*)); void __attribute__((__cdecl__)) qsort(void*, size_t, size_t, int (*)(const void*, const void*)); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) abs (int) __attribute__ ((__const__)); long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) labs (long) __attribute__ ((__const__)); # 385 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 typedef struct { int quot, rem; } div_t; typedef struct { long quot, rem; } ldiv_t; div_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) div (int, int) __attribute__ ((__const__)); ldiv_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) ldiv (long, long) __attribute__ ((__const__)); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _beep (unsigned int, unsigned int) __attribute__ ((__deprecated__)); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _seterrormode (int) __attribute__ ((__deprecated__)); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _sleep (unsigned long) __attribute__ ((__deprecated__)); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _exit (int) __attribute__ ((__noreturn__)); typedef int (* _onexit_t)(void); _onexit_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _onexit( _onexit_t ); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _putenv (const char*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _searchenv (const char*, const char*, char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _ecvt (double, int, int*, int*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _fcvt (double, int, int*, int*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _gcvt (double, int, char*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _makepath (char*, const char*, const char*, const char*, const char*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _splitpath (const char*, char*, char*, char*, char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _fullpath (char*, const char*, size_t); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _itoa (int, char*, int); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _ltoa (long, char*, int); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _ultoa(unsigned long, char*, int); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _itow (int, wchar_t*, int); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _ltow (long, wchar_t*, int); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _ultow (unsigned long, wchar_t*, int); long long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _atoi64(const char *); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _i64toa(long long, char *, int); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _ui64toa(unsigned long long, char *, int); long long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _wtoi64(const wchar_t *); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _i64tow(long long, wchar_t *, int); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _ui64tow(unsigned long long, wchar_t *, int); unsigned int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) (_rotl)(unsigned int, int) __attribute__ ((__const__)); unsigned int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) (_rotr)(unsigned int, int) __attribute__ ((__const__)); unsigned long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) (_lrotl)(unsigned long, int) __attribute__ ((__const__)); unsigned long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) (_lrotr)(unsigned long, int) __attribute__ ((__const__)); int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _set_error_mode (int); # 477 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 int __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) putenv (const char*); void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) searchenv (const char*, const char*, char*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) itoa (int, char*, int); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) ltoa (long, char*, int); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) ecvt (double, int, int*, int*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) fcvt (double, int, int*, int*); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) gcvt (double, int, char*); # 497 "c:\\gcc\\bin\\../lib/gcc/mingw32/4.6.2/../../../../include/stdlib.h" 3 void __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) _Exit(int) __attribute__ ((__noreturn__)); typedef struct { long long quot, rem; } lldiv_t; lldiv_t __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) lldiv (long long, long long) __attribute__ ((__const__)); long long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) llabs(long long); long long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strtoll (const char* __restrict__, char** __restrict, int); unsigned long long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) strtoull (const char* __restrict__, char** __restrict__, int); long long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) atoll (const char *); long long __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) wtoll (const wchar_t *); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) lltoa (long long, char *, int); char* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) ulltoa (unsigned long long , char *, int); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) lltow (long long, wchar_t *, int); wchar_t* __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) ulltow (unsigned long long, wchar_t *, int); # 21 "crp.c" 2 static void FixString(char *name) { int i, j, len, spaces, start; len = strlen(name); if (len == 2) { SemError(129); return; } if (ignore_case) upcase(name); spaces = 0; start = name[0]; for (i = 1; i <= len-2; i++) { if (name[i] > 0 && name[i] <= ' ') spaces = 1; if (name[i] == '\\') { if (name[i+1] == '\\' || name[i+1] == '\'' || name[i+1] == '\"') { for (j = i; j < len; j++) name[j] = name[j+1]; len--; } } } if (spaces) SemError(124); } static void MatchLiteral (int sp) { PTermNode sn, sn1; int matched_sp; sn = (PTermNode) Collection_At(&term_tab, sp); matched_sp = MatchDFA((unsigned char *) sn->name, sp); if (matched_sp != 0) { sn1 = (PTermNode) Collection_At(&term_tab, matched_sp); sn1->type = 2; sn->type = 3; } else sn->type= 1; } static void SetCtx (int gp) { PGraphNode gn; while (gp > 0) { gn = (PGraphNode) Collection_At(&nodes_tab, gp); if (gn->type == 1 || gn->type == 2) gn->pointer4 = 1; else if (gn->type == 4 || gn->type == 5) SetCtx(gn->pointer1); else if (gn->type == 6) { SetCtx(gn->pointer1); SetCtx(gn->pointer2); } gp = gn->next; } } static void StringClass(char *s, Set *items) { s[strlen(s)-1]=0; s++; while (*s) Set_AddItem(items, *s++); } Error_Func Custom_Error = 0L; static int Sym; static int errors = 0; static int ErrDist = 2; static void CR(void); static void Ident(char *s); static void Declaration(int *startedDFA); static void Attribs(int *n); static void SemText(int *n); static void Expression(int *n); static void SetDecl(void); static void TokenDecl(int sec_type); static void NameDecl(void); static void TokenExpr(int *n); static void CompSet(PSet items); static void SimSet(PSet items); static void String(char *s); static void ChrSet(int *n); static void Term(int *n); static void Factor(int *n); static void Symbol(char *name); static void TokenTerm(int *n); static void TokenFactor(int *n); static unsigned short int SymSet[][3] = { {0x7EC7,0x4,0x80}, {0x106,0xBA80,0x82}, {0x202,0x0,0x0}, {0x100,0x4400,0x1}, {0x106,0xFE80,0x83}, {0x7D40,0x4407,0x1}, {0x6,0xA200,0x0}, {0x0} }; void GenError(int (*_errno())) { if (ErrDist >= 2) { if (Custom_Error != 0L) (*Custom_Error) ((*_errno()), S_NextLine, S_NextCol, S_NextPos); errors++; } ErrDist = 0; } void SynError(int (*_errno())) { if ((*_errno()) <= 63) (*_errno()) = 63; if (ErrDist >= 2) { if (Custom_Error != 0L) (*Custom_Error) ((*_errno()), S_NextLine, S_NextCol, S_NextPos); errors++; } ErrDist = 0; } void SemError(int (*_errno())) { if ((*_errno()) <= 63) (*_errno()) = 63; if (ErrDist >= 2) { if (Custom_Error != 0L) (*Custom_Error) ((*_errno()), S_Line, S_Col, S_Pos); errors++; } ErrDist = 0; } static void Get(void) { do { Sym = S_Get(); if (Sym <= 41) ErrDist ++; else { if (Sym == 42) { char s[100]; S_GetString(S_NextPos, S_NextLen, s, sizeof(s)-1); SetOptions(s); } else ; S_NextPos = S_Pos; S_NextCol = S_Col; S_NextLine = S_Line; S_NextLen = S_Len; } } while (Sym > 41); } static int In (unsigned short int *SymbolSet, int i) { return SymbolSet[i / 16] & (1 << (i % 16)); } static void Expect (int n) { if (Sym == n) Get(); else GenError(n); } static void ExpectWeak (int n, int follow) { if (Sym == n) Get(); else { GenError(n); while (!(In(SymSet[follow], Sym) || In(SymSet[0], Sym))) Get(); } } static int WeakSeparator (int n, int syFol, int repFol) { unsigned short int s[3]; int i; if (Sym == n) { Get(); return 1; } if (In(SymSet[repFol], Sym)) return 0; for (i = 0; i < 3; i++) s[i] = SymSet[0][i] | SymSet[syFol][i] | SymSet[repFol][i]; GenError(n); while (!In(s, Sym)) Get(); return In(SymSet[syFol], Sym); } int Successful(void) { return errors == 0; } static void CR(void) { Name name1; int attr, sem, exp, is_new, sp, type; int startedDFA = 0; PNTermNode sn; Expect(5); Ident(compiler_name); global_defs.pos = S_NextPos; global_defs.line = S_NextLine; while (Sym >= 1 && Sym <= 5 || Sym >= 7 && Sym <= 9 || Sym >= 15 && Sym <= 17 || Sym >= 19 && Sym <= 41) { Get(); } global_defs.len = (int) (S_NextPos-global_defs.pos); while (Sym >= 10 && Sym <= 14 || Sym == 18) { Declaration(&startedDFA); } while (!(Sym == 0 || Sym == 6)) { GenError(43); Get(); } if (Successful()) { if (!MakeDeterministic()) SemError(127); }; Expect(6); while (Sym == 1) { attr = 0; sem = 0; Ident(name1); if ((sp = FindSym(name1, &type)) != -1) { is_new = 0; if (type != 3) { SemError(108); return; } else { sn = (PNTermNode) Collection_At(&nterm_tab, sp); if (sn->graph) SemError(107); sn->line_dec = S_Line; } } else { sp = NewSym(name1, 3); sn = (PNTermNode) Collection_At(&nterm_tab, sp); is_new = 1; sn->line_dec = S_Line; }; if (Sym == 35 || Sym == 37) { Attribs(&attr); } if (!is_new) { if (sn->has_attr && !attr) SemError(105); if (!sn->has_attr && attr) SemError(105); } if (attr) { sn->attr = attr; sn->has_attr = 1; }; ExpectWeak(7,1); if (Sym == 39) { SemText(&sem); } Expression(&exp); if (sem) { (void) LinkGraph(sem, exp); exp = sem; }; ExpectWeak(8,2); sn = (PNTermNode) Collection_At(&nterm_tab, sp); sn->graph = exp; while (!(Sym >= 0 && Sym <= 1 || Sym == 9)) { GenError(44); Get(); } } Expect(9); Ident(name1); if (strcmp(name1, compiler_name)) SemError(117); if((sp = FindSym(compiler_name, &type)) != -1) { if (type!=3) SemError(108); else { sn = (PNTermNode) Collection_At(&nterm_tab, sp); if (sn->has_attr) SemError(112); sn->reachable=1; } } else SemError(111); no_sym = NewSym("not", 1); Expect(8); if (dirty_DFA && !MakeDeterministic()) SemError(127); } static void Ident(char *s) { Expect(1); S_GetString(S_Pos, S_Len, s, 32 -1); } static void Declaration(int *startedDFA) { Set ignore; int n1, n2, nested = 0; switch (Sym) { case 10: Get(); while (Sym == 1) { SetDecl(); } break; case 11: Get(); while (Sym >= 1 && Sym <= 2) { TokenDecl(1); } break; case 12: Get(); while (Sym == 1) { NameDecl(); } break; case 13: Get(); while (Sym >= 1 && Sym <= 2) { TokenDecl(11); } break; case 14: Get(); Expect(15); TokenExpr(&n1); Expect(16); TokenExpr(&n2); if (Sym == 17) { Get(); nested = 1; } if (n1 * n2) NewComment(n1, n2, nested); break; case 18: Get(); if (Sym == 19) { Get(); if (*startedDFA) SemError(130); ignore_case = 1; } else if (Sym >= 1 && Sym <= 2 || Sym >= 23 && Sym <= 24) { Set_Init(&ignore); CompSet(&ignore); AddIgnore(&ignore); if (Set_IsItem(&ignore,0)) SemError(119); Set_Done(&ignore); } else GenError(45); break; default :GenError(46); break; } *startedDFA = 1; } static void Attribs(int *n) { long P; int Len, Line, Col; if (Sym == 35) { Get(); P = S_Pos+1; Line = S_Line; Col = S_Col; while (Sym >= 1 && Sym <= 35 || Sym >= 37 && Sym <= 41) { if (Sym >= 1 && Sym <= 2 || Sym >= 4 && Sym <= 35 || Sym >= 37 && Sym <= 41) { Get(); } else if (Sym == 3) { Get(); SemError(102); } else GenError(47); } Expect(36); Len = (int) (S_Pos - P); *n = MakeSemGraph(8, P, Len, Line, Col); } else if (Sym == 37) { Get(); P = S_Pos+2; Line = S_Line; Col = S_Col; while (Sym >= 1 && Sym <= 37 || Sym >= 39 && Sym <= 41) { if (Sym >= 1 && Sym <= 2 || Sym >= 4 && Sym <= 37 || Sym >= 39 && Sym <= 41) { Get(); } else if (Sym == 3) { Get(); SemError(102); } else GenError(48); } Expect(38); Len = (int) (S_Pos - P); *n = MakeSemGraph(8, P, Len, Line, Col); } else GenError(49); } static void SemText(int *n) { long P; int Len, Line, Col; Expect(39); P = S_Pos+2; Line = S_Line; Col = S_Col; while (Sym >= 1 && Sym <= 39 || Sym == 41) { if (Sym >= 1 && Sym <= 2 || Sym >= 4 && Sym <= 38 || Sym == 41) { Get(); } else if (Sym == 3) { Get(); SemError(102); } else if (Sym == 39) { Get(); SemError(109); } else GenError(50); } Expect(40); Len = (int) (S_Pos - P); *n = MakeSemGraph(7, P, Len, Line, Col); } static void Expression(int *n) { int n0 = 0, n1, n2, SX_Line; Term(&n1); while (WeakSeparator(27,4,3)) { if (n0 == 0) n0 = n1 = MakeGraph(6, n1); SX_Line = S_Line; Term(&n2); n2 = MakeGraph(6, n2); SetGraphLine(n2,SX_Line); n1 = LinkAltGraph(n1, n2); } *n = (n0 ? n0 : n1); } static void SetDecl(void) { Name name; Set items; Set_Init(&items); Ident(name); if (FindClass(name) != -1) SemError(107); Expect(7); CompSet(&items); Expect(8); if (Set_Empty(&items)) SemError(101); (void) NewClass(name, &items); Set_Done(&items); } static void TokenDecl(int sec_type) { char name[100]; int p = 0, sp, type; if (Sym == 1) { Ident(name); if ((sp = FindSym(name, &type)) != -1) SemError(107); else sp = NewSym(name, sec_type); while (!(Sym >= 0 && Sym <= 2 || Sym >= 6 && Sym <= 7 || Sym >= 10 && Sym <= 14 || Sym == 18 || Sym == 39)) { GenError(51); Get(); } if (Sym == 7) { Get(); TokenExpr(&p); if (sec_type == 1) ConvertToStates(p, sp); else ConvertToStates(p, sp+1024); Expect(8); } else if (Sym >= 1 && Sym <= 2 || Sym == 6 || Sym >= 10 && Sym <= 14 || Sym == 18 || Sym == 39) { P_option = 1; } else GenError(52); } else if (Sym == 2) { String(name); P_option = 1; if ((sp = FindSym(name, &type)) != -1) SemError(107); else sp = NewSym(name, sec_type); } else GenError(53); if (Sym == 39) { SemText(&p); if (sec_type == 1) SemError(114); else SetPragmaText(sp, p); } } static void NameDecl(void) { Name username, name; Ident(username); Expect(7); if (Sym == 1) { Ident(name); } else if (Sym == 2) { String(name); } else GenError(54); Expect(8); NewName(name, username); } static void TokenExpr(int *n) { int n0 = 0, n1, n2; TokenTerm(&n1); while (WeakSeparator(27,6,5)) { if (n0 == 0) n0 = n1 = MakeGraph(6, n1); TokenTerm(&n2); n2 = MakeGraph(6, n2); n1 = LinkAltGraph(n1, n2); } *n = (n0 ? n0 : n1); } static void CompSet(PSet items) { Set set1, set2; Set_Init(&set1); Set_Init(&set2); SimSet(&set1); while (Sym >= 20 && Sym <= 21) { if (Sym == 20) { Get(); SimSet(&set2); Set_Union(&set1, &set2); } else if (Sym == 21) { Get(); SimSet(&set2); Set_Diference(&set1, &set2); } else GenError(55); Set_Clean(&set2); } Set_Union(items, &set1); Set_Done(&set1); Set_Done(&set2); } static void SimSet(PSet items) { Name name; char str[100]; int n1, n2; switch (Sym) { case 1: Ident(name); if (FindClass(name) == -1) SemError(115); GetClassWithName(name, items); break; case 2: String(str); StringClass(str, items); break; case 24: ChrSet(&n1); if (Sym == 22) { Get(); ChrSet(&n2); Set_AddRange(items, n1, n2); } else if (Sym == 6 || Sym == 8 || Sym >= 10 && Sym <= 14 || Sym == 18 || Sym >= 20 && Sym <= 21) { Set_AddItem(items, n1); } else GenError(56); break; case 23: Get(); Set_Union(items, &ANY_SET); break; default :GenError(57); break; } } static void String(char *s) { Expect(2); S_GetString(S_Pos, S_Len, s, 100 -1); FixString(s); } static void ChrSet(int *n) { char str[5]; int x; Expect(24); Expect(25); if (Sym == 4) { Get(); S_GetString(S_Pos, S_Len, str, sizeof(str)-1); x = atoi(str); if (x > 255) { SemError(118); x = 0; } *n = x; } else if (Sym == 2) { Get(); S_GetString(S_Pos, S_Len, str, sizeof(str)-1); if (strlen(str) != 3) SemError(118); *n = str[1]; } else GenError(58); Expect(26); } static void Term(int *n) { int n0 = 0, n1, n2; if (Sym >= 1 && Sym <= 2 || Sym == 23 || Sym == 25 || Sym >= 28 && Sym <= 29 || Sym == 31 || Sym == 33 || Sym == 39) { Factor(&n1); n0 = n1; while (Sym >= 1 && Sym <= 2 || Sym == 23 || Sym == 25 || Sym >= 28 && Sym <= 29 || Sym == 31 || Sym == 33 || Sym == 39) { Factor(&n2); n1 = LinkGraph(n1, n2); } } else if (Sym == 8 || Sym >= 26 && Sym <= 27 || Sym == 30 || Sym == 32) { n0 = MakeSemGraph(7, -1, 0, S_Line, S_Col); } *n = n0; } static void Factor(int *n) { char name1[100]; int weak = 0, SX_Line; int n1, n2 = 0; int sp, is_new, type; PNTermNode snt; switch (Sym) { case 1: case 2: case 28: if (Sym == 28) { Get(); weak = 1; } Symbol(name1); sp = FindSym(name1, &type); if (type == 2) SemError(104); if (weak && type == 1) type = 2; if (weak && type == 3) SemError(123); n1 = MakeGraph(type, sp); if (type == 3) { snt = (PNTermNode) Collection_At(&nterm_tab, sp); is_new = snt->graph == 0; snt->line_use = S_Line; snt->reachable = 1; }; if (Sym == 35 || Sym == 37) { Attribs(&n2); (void) LinkAltGraph(n1, n2); if (type != 3) SemError(103); else { if(!is_new && !snt->has_attr) SemError(105); if (is_new) snt->has_attr = 1; }; } else if (Sym >= 1 && Sym <= 2 || Sym == 8 || Sym == 23 || Sym >= 25 && Sym <= 33 || Sym == 39) { if (type == 3) if (!is_new && snt->has_attr) SemError(105); } else GenError(59); break; case 25: Get(); Expression(&n1); Expect(26); break; case 29: Get(); SX_Line = S_Line; Expression(&n1); Expect(30); n1 = MakeGraph(4, n1); SetGraphLine(n1,SX_Line); break; case 31: Get(); SX_Line = S_Line; Expression(&n1); Expect(32); n1 = MakeGraph(5, n1); SetGraphLine(n1,SX_Line); break; case 39: SemText(&n1); break; case 23: Get(); n1 = MakeGraph(9, 0); break; case 33: Get(); n1 = MakeGraph(10, 0); break; default :GenError(60); break; } *n = n1; } static void Symbol(char *name) { int sp, type; if (Sym == 1) { Ident(name); sp = FindSym(name, &type); if (sp == -1) sp = NewSym(name, 3); } else if (Sym == 2) { String(name); sp = FindSym(name, &type); if (sp == -1) { sp = NewSym(name, 1); MatchLiteral(sp); }; } else GenError(61); } static void TokenTerm(int *n) { int n0 = 0, n1, n2; TokenFactor(&n1); n0 = n1; while (Sym >= 1 && Sym <= 2 || Sym == 25 || Sym == 29 || Sym == 31) { TokenFactor(&n2); n1 = LinkGraph(n1, n2); } if (Sym == 34) { Get(); Expect(25); TokenExpr(&n2); Expect(26); SetCtx(n2); n1 = LinkGraph(n1, n2); } *n = n0; } static void TokenFactor(int *n) { char name[100]; int p = 0; switch (Sym) { case 1: Ident(name); if ((p = FindClass(name)) == -1) { p = MakeGraph(1, 0); SemError(115); } else p = MakeGraph(2, p); break; case 2: String(name); p = StrToGraph((unsigned char *) name); break; case 25: Get(); TokenExpr(&p); Expect(26); break; case 29: Get(); TokenExpr(&p); Expect(30); p = MakeGraphOp(4, p); break; case 31: Get(); TokenExpr(&p); Expect(32); p = MakeGraphOp(5, p); break; default :GenError(62); break; } *n = p; } void Parse(void) { S_Reset(); Get(); CR(); }
/********************************************************** ** PARSER_H.FRM ** Coco/R C Support Frames. ** Author: Frankie Arzu** Modification (2012): MrHarmonies ** ** Jun 12, 1996 Version 1.06 ** Many fixes and suggestions thanks to ** Pat Terry **********************************************************/ #ifndef PARSER_HEADER_INCLUDE #define PARSER_HEADER_INCLUDE typedef void (*Error_Func) (int nr, int line, int col, long pos); #define MinErrDist 2 #define MAXERROR 63 void Parse(void); /* Parse the source */ int Successful(void); /* Returns 1 if no errors have been recorded while parsing */ void SynError(int (*_errno())); void SemError(int (*_errno())); */ #define LexString(lex, size) S_GetString(S_Pos, S_Len, lex, size) /* Retrieves Lex as exact spelling of current token */ #define LexName(lex, size) S_GetName(S_Pos, S_Len, lex, size) /* Retrieves Lex as name of current token (capitalized if IGNORE CASE) */ #define LookAheadString(lex, size) S_GetString(S_NextPos, S_NextLen, lex, size) /* Retrieves Lex as exact spelling of lookahead token */ #define LookAheadName(lex, size) S_GetName(S_NextPos, S_NextLen, lex, size) /* Retrieves Lex as name of lookahead token (capitalized if IGNORE CASE) */ #endif /* PARSER_HEADER_INCLUDE */
Alhamdulillah! :) Terima kasih kerana sudi membaca. Selamat berprogramming!
Selasa, 3 Januari 2012
#13: To the Women in My Life/Le Lis
My honest rating. |
Kenapa 3.5/10 sahaja? Tontonlah Ombak Rindu (2011) dan BE VERY HONEST, bagilah rating.Ada baiknya dengar lagu Billy Cobham ini, lagi feeling Wakakakaka!
Billy Cobham - To the Women in My Life/Le Lis
Seriously pengarah perlu review semula filem ini. Saya lihat ia dirakam sambil lewa kerana ada banyak ketidaksempurnaan yang tak patut wujud pun pada sebuah filem. Even filem zaman P. Ramlee pun tak ada masaalah out-of-focus seperti yang ada dalam filem Ombak Rindu (2011). Ambil positif, di masa hadapan, janganlah berlaku lagi perkara yang sama. Itu belum lagi sentuh bab transition hitam antara scene yang kadang-kadang terpotong dialong menjadikan sesetengah dialog jadi tergantung serta soundtrack sama yang berulang-ulang ntah berapa kali. Sekali lagi, ambil positif ya. Untung besar tu.. Taniah, dah berbelas juta dapat.
P/S: Mutu kerja pun kenalah sepadan dengan "upahnya" ok! :)
Try harder! |
Tags:
bintang,
critic,
film review,
ombak rindu,
star
#12: Coderama - A smarter way untuk buat benda remeh
Saya geleng kepala sendiri bila membaca semula source code yang saya tulis dahulu. Saya tak mempraktikkan code optimization dengan menggunakan sepenuhnya kebolehan programming language yang saya gunakan. Contohnya ini, saya telah buat satu event dimana bila double click diatas status bar didalam Coderama IDE, semua panel tepi dan bawah akan collapse dan memberikan view source code editor yang luas. Ini kod saya untuk menghilangkan dan memunculkan semula semua panel disekeliling source code editor:
Apa boleh buat, saya bukan coder profesional atau amatur, saya masih newbie yg sedang seronok bereksperimen :P Hehehe. Apapun, saya tiba-tiba teringatkan tentang satu operator didalam Pascal. Dalam Pascal ada beberapa operator senang untuk memudahkan kerja-kerja pengkodan. Antaranya OR, NOT, AND dan beberapa lagi operator lain. Kalau mengikut kod saya diatas, if panel1.visible=true then panel1.visible:=false else panel1.visible:=true; bolehlah diterjemahkan sebagai "kalau panel1 sedang ada, hilangkan panel1 atau jika tidak (jika panel1 memang dah hilang) adakan panel1".
Lihat bagaimana pula operator "not" dipraktikkan disini :)
procedure TForm1.onStatusbar1DBClick .. bla bla bla.. begin if panel1.visible=true then panel1.visible:=false else panel1.visible:=true; if panel2.visible=true then panel2.visible:=false else panel2.visible:=true; if panel3.visible=true then panel3.visible:=false else panel3.visible:=true; end;
Apa boleh buat, saya bukan coder profesional atau amatur, saya masih newbie yg sedang seronok bereksperimen :P Hehehe. Apapun, saya tiba-tiba teringatkan tentang satu operator didalam Pascal. Dalam Pascal ada beberapa operator senang untuk memudahkan kerja-kerja pengkodan. Antaranya OR, NOT, AND dan beberapa lagi operator lain. Kalau mengikut kod saya diatas, if panel1.visible=true then panel1.visible:=false else panel1.visible:=true; bolehlah diterjemahkan sebagai "kalau panel1 sedang ada, hilangkan panel1 atau jika tidak (jika panel1 memang dah hilang) adakan panel1".
procedure TForm1.onStatusbar1DBClick .. bla bla bla.. begin panel1.visible:=not panel1.visible; panel2.visible:=not panel2.visible; panel3.visible:=not panel3.visible; end;
Lihat bagaimana pula operator "not" dipraktikkan disini :)
Kalau ikut bahasa melayu, operator "not" bolehlah dicontohkan dengan perkataan "tidak". Benar bermaksud true. True adalah boolean. Jika perkataan "benar" berada sendirian, ia bermaksud benar. Akan tetapi kalau ada operator "Tidak" dihadapan boolean tadi, ia membawa maksud lain. "Tidak Benar" membawa maksud Salah/Palsu atau boolean "False". "Not True" sudah tentu bermaksud False. Bagaimana pula dengan "Tidak Tidak"? Ia bermaksud "Benar". Simple kan? :)panel1.visible:=not panel1.visible; bermaksud, "visibility panel1 adalah bukan/sebalinya kepada visibiliti panel1". Simpler, smarter dan menampakkan jalan pintas yang baik dipraktikkan. Kalau anda seorang programmer, manfaatkanlah penggunaan operator atau apa-apa features yang ada didalam programming language yang anda gunakan kerana perkara remeh sebegini banyak memberi manfaat pada programmer sendiri. Terima kasih.
Tags:
coderama,
free pascal,
if then else,
not,
on-off,
operator
#11: Expired Centuria DNP 100
My younger brother, Udin |
Pagor |
A very good friend of mine, Joe |
Make: Olympus OM2n/Zuiko 50mm/1.4/Expired Centuria DNP 100
Semuanya manually developed dan negative scanned by Dr. Pishal (kudos). Baru-baru ini saya telah sertai meeting SPPG dan saya berasa amat terkejut dgn perkembangan group itu akhir-akhir ini. SPPG bermula dengan hanya 5-6 orang ahli peminat fotografi analog, dan sekarang ia berkembang hingga setakat ini ahlinya mencapai lebih 350 orang. Sewaktu menghadiri perjumpaan SPPG di studio SPPG baru-baru ini, saya dapat lihat banyak aktiviti dilakukan seperti latihan amali film developing dan penggunaan film enlarger (sebuah studio bilik gelap yang lengkap).
Teruskan praktis yang terbaik! Terus maju SPPG! :)
Tags:
analog,
centuria dnp,
film,
olympus om2n,
SPPG,
zuiko 50 1.4
Isnin, 2 Januari 2012
#10: Coderama IDE, Formatting Error Messages function
Petang tadi saya telah menulis satu function untuk parsing Formatted Error Message mengikut GNU Coding Standards. Ia ditulis melalui pascal dan digunakan bersama komponen synedit. Saya ingin kongsikan disini source code parser untuk mengeluarkan line number dari error message yang telah diformat mengikut GNU Coding Standards.
Mengikut artikel "4.4 Formatting Error Messages" dari GNU Coding Standards, Error messages from compilers should look like this:
If you want to mention the column number, use one of these formats:
Source code yang saya kongsikan diatas adalah compatible dengan error message jenis pertama yang disertakan dengan column iaitu contohnya "coderama.c:50:20: declaration expected" dimana ia akan parse line number sebagai 50 dan column number sebagai 20 dan "coderama.c:15: declaration expected", line number sebagai 15 dan column sebagai 0. Terima kaseh. Selamat bercoderama!
function TForm1.linedebug(a:string):integer; var linenumber,colnumber,messageseparator:integer; string1,parse2,parse3,ki,sourcefile,errmessage:string; begin colnumber:=0; messageseparator:= pos(': ',a); errmessage:=copy(a,messageseparator,length(a)); string1:= copy (a,0,pos(': ',a)-1); sourcefile:=copy(string1,0,pos(':',string1)-1); ki:=copy(string1,pos(':',string1)+1,length(string1)); if pos(':',ki)<> 0 then begin parse2:=copy(ki,pos(':',ki)+1,length(ki)); parse3:=copy(ki,0,pos(':',ki)-1); end else parse3:=ki; linedebug:=strtoint(parse3); except on Exception : EConvertError do linedebug:=-1; end; end;
Mengikut artikel "4.4 Formatting Error Messages" dari GNU Coding Standards, Error messages from compilers should look like this:
source-file-name:lineno: message
If you want to mention the column number, use one of these formats:
source-file-name:lineno:column: message
source-file-name:lineno.column: message
Source code yang saya kongsikan diatas adalah compatible dengan error message jenis pertama yang disertakan dengan column iaitu contohnya "coderama.c:50:20: declaration expected" dimana ia akan parse line number sebagai 50 dan column number sebagai 20 dan "coderama.c:15: declaration expected", line number sebagai 15 dan column sebagai 0. Terima kaseh. Selamat bercoderama!
Tags:
coderama,
free pascal,
ide,
lazarus,
programming,
tcc
#9: Khoda & Coderama
Saya dalam satu proses development satu IDE untuk C programming language yang saya namakan Khoda. Ia satu IDE simple yang saya fikir untuk menjadikan ia satu IDE yang "self-contain" diamana, ia code editor, compiler, assembler dan linker dalam satu pakej. Saya fikir untuk menjadikan ia satu single application tanpa file sampingan yang memudahkan portabliliti IDE itu. Saya membayangkan kalau pengguna ingin mendevelop di satu platform yang belum mempunyai compiler, pengguna sudah tentu perlu install banyak file dan menggunakan banyak tools berlainan untuk menghasilkan satu application. Jadi saya fikir idea "self-contain" sudah tentu amat berguna disini.
Khoda di stage awal development. |
Nama: Khoda keluar dari nama project yang menarik perhatian saya "CODA" iaitu satu aplikasi text editor untuk Mac OSX. Khoda, derived dari nama saya. :) Akan tetapi.. Saya mula fikir ia satu nama yang teruk. Lagipun saya ada terdengar perkataan Khoda dari filem The House of Sand and Fog dimana veteran iran Mr. Behrani telah melakukan nazar atas nama Lord Khoda. Saya ada cuba menanyakan pada rakan saya ttg nama "Khoda" akan tetapi tak ada maklum balas. Apapun, untuk mengelakkan masaalah dimasa depan, saya fikir untuk menukarnya pada "Coderama". Terima kasih google, sekarang amat senang untuk search satu term dan mudah untuk kita menganalisa resultnya. Saya tidak terjumpa apa-apa nama project bernama "Coderama" jadi saya fikir saya akan menukar nama project ini ke "Coderama" tak lama lagi.Project ini ditulis melalui Lazarus dan saya fikir untuk melakukan object linking antara object pascal dan C. Harap ia berjaya dan saya fikir ia boleh berjaya melalui beberapa artikel yang saya baca mengenai code mixing. Walaubagaimanapun jikalau object linking ini tidak berjaya, saya mungkin tidak akan berjaya untuk mengeluarkan project ini versi "self-contain" dan project ini akan datang dengan beberapa file yang berasingan. Akan tetapi saya akan memastikan ia dalam bilangan yang minima untuk memastikan ia mudah dialihakan dari komputer ke komputer.
Tags:
coderama,
compiler,
free pascal,
khoda,
lazarus,
programming,
self-contain,
tcc
#8: Lafe - A Lazarus AIML Front-End
Lamo dok update blog :) Dalam beberapa minggu ni saya banyak bereksplorasi dalam programming. Saya jumpa banyak perkara yang mungkin dah ketinggalan zaman, tapi saya tetap menghargai hasil kerja yang mungkin umurnya dah berbelas tahun. Antara yang paling menarik minat saya adalah project SQLite, TCC dan AIML.
AIML sebenarnya saya telah jumpa beberapa tahun lepas (sewaktu masih di sekolah menengah) dan pada waktu tu saya masih lagi baru dalam dunia programming. Saya menggunakan Borland Delphi IDE untuk compile project AIML bernama PASCAlice iaitu front-end Delphi untuk Artificial Intelligence Markup Language. Beberapa minggu lepas saya telah mencari semula project ini dan dengan pengganti open-source untuk Delphi IDE iaitu Lazarus, saya cuba mengconvertnya supaya ia compatible dengan Lazarus dan compilernya, Free Pascal. Hasilnya bagus. Saya telah berjaya untuk compile PASCAlice di Lazarus IDE v0.9.30 dan menghasilkan executable yang setakat ini boleh digunakan untuk windows. Untuk platform lain walaubagaimanapun masih belum dicuba. Disebabkan version saya of PASCAlice telah banyak diubahsuai dan interfacenya banyak lari, jadi saya fikir untuk fork-kan project PASCAlice menjadi Lafe (disebut seperti Cafe dengan "L" menggantikan "C"). Ini Lafe di http://code.google.com/p/lafe/:
Saya release project ini dibawah GNU General Public License v2 dan source code boleh didownload terus dari laman google code Lafe. Saya mengalu-ngalukan penyertaan anda untuk menambahbaik lagi project ini dan melaporkan sebarang issue, bug-report atau cadangan. Saya juga mengalu-ngalukan programmer di luar sana yang menggunakan Lazarus di platform lain selain windows seperti Linux atau Mac OSX untuk membantu saya meng"port" project Lafe ini ke platform lain bagi memastikan semua pengguna komputer tidak ketinggalan mendapat manafaat dari praktis programming cross-platform. Terima kaseh.
AIML sebenarnya saya telah jumpa beberapa tahun lepas (sewaktu masih di sekolah menengah) dan pada waktu tu saya masih lagi baru dalam dunia programming. Saya menggunakan Borland Delphi IDE untuk compile project AIML bernama PASCAlice iaitu front-end Delphi untuk Artificial Intelligence Markup Language. Beberapa minggu lepas saya telah mencari semula project ini dan dengan pengganti open-source untuk Delphi IDE iaitu Lazarus, saya cuba mengconvertnya supaya ia compatible dengan Lazarus dan compilernya, Free Pascal. Hasilnya bagus. Saya telah berjaya untuk compile PASCAlice di Lazarus IDE v0.9.30 dan menghasilkan executable yang setakat ini boleh digunakan untuk windows. Untuk platform lain walaubagaimanapun masih belum dicuba. Disebabkan version saya of PASCAlice telah banyak diubahsuai dan interfacenya banyak lari, jadi saya fikir untuk fork-kan project PASCAlice menjadi Lafe (disebut seperti Cafe dengan "L" menggantikan "C"). Ini Lafe di http://code.google.com/p/lafe/:
Lazarus AIML Front-End |
Tags:
aiml,
artificial intelligence,
coderama,
lazarus,
pascal,
pascalice,
programming
Langgan:
Catatan (Atom)