5a37cc1fda8a0e37d2f68f60827c27420cf2dd02
[svn/Cll1h/.git] / cll1.txt
1 THIS FILE IS OBSOLETE !!!
2
3
4
5
6 C<<1: The Programming Language
7 ==============================
8
9 Feedback: xchaos@arachne.cz
10 Homepage: http://gpl.arachne.cz
11
12 Copyright (G) 2004 Michael Polak, x@n.cz
13 C<<1 is available under terms of GNU Lesser Public License (LGPL)
14 This file is available under terms of GNU Free Documentation License
15
16 1. Introduction
17 ---------------
18
19 There are various extensions and definitions of classical C language,
20 for example object oriented "C++" and "Objective C", minimalistic C--,
21 proprietary C# used by .Net project, etc. Many other modern languages
22
23 C<<1 is designed to work as "stylesheet" for very classical ANSI C, and
24 it was specificaly tested to work fine with GNU C Compiler gcc. There is
25 no special C<<1 compiler or interpreter; instead, you are expected to
26 include special header file called cll1.h the same way you would include
27 let's say string or I/O library implemented in standard C library. Except
28 that you don't need to link your executable with any special library,
29 neither staticaly nor dynamicaly, and you don't have to configure your gcc
30 or make to do so.
31
32 #include <cll1.h>
33
34 Or #include "cll1.h", if cll1.h is not installed in your /usr/include
35 directory. That'it. No linking, no initialization, allocation, or so.
36
37 C<<1 can be used for dummy, structured or object oriented programing,
38 whatever method you prefere. C<<1 focuses mainly on adding new complex
39 semantic structures into C, rather than inventing brand new syntax or class
40 hieararchy, or providing set of pre-defined library functions. To allow
41 that, most of C<<1 functions are implemented as macros for C preprocessor.
42
43 2. Getting started
44 ------------------
45
46 #include <cll1.h>
47
48 program
49 {
50 puts("Hello World!");
51 }
52
53 Of course, int main(int argc,void **argv) can be still used. In fact,
54 macro "program" doesn't do much more than that ! Following program prints
55 all arguments:
56
57 program
58 {
59 char *ptr;
60
61 arguments
62 {
63 thisargument(ptr);
64 puts(ptr);
65 }
66 else
67 puts("Bleeeeh, no arguments supplied... :-(");
68 }
69
70 Well, don't be surprised with "else" after "arguments". This is not the
71 last time in C<<1, when you will see C keywords somewhere you don't expect
72 them. Of course, you would like to use it this way, I guess:
73
74 program
75 {
76 char *ptr;
77
78 arguments
79 {
80 argument("-?") printf("This is just help!\n");
81 else argument("-f") { nextargument(ptr) printf("Forced argument: %s\n",ptr); }
82 else { thisargument(ptr); printf("Simple argument: %s \n",ptr); }
83 }
84 else
85 puts("Bleeeeh, no arguments supplied... :-(");
86 }
87
88 2. Where is my main() funciton ?!
89 ---------------------------------
90
91 If you want to use int main(int argc,void **argv) { } instead of
92 program { }, it's ok. Being fan of Basic and not Pascal, I don't
93 like the program keyword at all. In fact, by avoiding "program" construct
94 and using standard main() declaration, you would be still able to access
95 most of C<<1 functionality, but for example not the arguments() structure
96 mentioned above.
97
98 3. Ok, let's go on
99 ------------------
100
101 This is some code to send e-mail using unix sendmail:
102 (ok, nothing special, same as "echo .... | sendmail ....")
103
104 program
105 {
106 paste("From: me@here\nSubject: Here we go...\n\nblah blah blah")
107 system("/usr/sbin/sendmail someone@somewhere");
108 }
109
110 This program prints exactly 6th column of /etc/passwd file
111 (ok, nothing special, same as "cut -f 6 -d : /etc/passwd")
112
113 program
114 {
115 char *ptr;
116 parse("/etc/passwd")
117 {
118 column(ptr,_,':',6);
119 if(ptr)puts(ptr);
120 }
121 done;
122 }
123
124 But next program prints 1st and 6th column of /etc/passwd.
125 (What is equivalent in bash ?)
126
127 program
128 {
129 char *ptr;
130 int i;
131 parse("/etc/passwd")
132 {
133 columns(ptr,_,':',i) switch(i)
134 {
135 case 1: printf("%s...",ptr); break;
136 case 6: puts(ptr);
137 }
138 }
139 done;
140 }
141
142
143 4. Groups of C<<1 macros
144 ------------------------
145
146 ! - macro is available only when using "program" instead of "main()"
147
148 I. Unconditional iterations - without else
149
150 every
151 iterate
152 repeat !
153
154 II. Conditional iterations - else can happen once
155
156 find
157 arguments !
158 argument
159 nextargument
160
161 III. Conditional iterations - else can happen many times
162
163 search
164 valid_split
165 valid_columns
166
167 IV. Weird iterations (with something special)
168
169 parse - [fail] - done
170
171 V. Standalone sequences - they look like function calls, but they are not.
172
173 insert
174 append
175 push
176 remove
177 sort
178 shell
179 paste
180 column
181 valid_column
182 ...
183
184 VI. Well behaved seqences - can be used anywhere where functions can.
185
186 create
187 string
188 goto_*
189 prefix
190 suffix
191 ...
192
193 5. Forbidden namespace
194 ----------------------
195
196 Variables starting with _ (underscored) followed by one or more capital
197 characters (A-Z) are reserved as C<<1 private compile-time namespace.
198
199 6. Compile time errors
200 ----------------------
201
202 - parse error at end of input
203
204 You probably forgot to close some macro which must be obligatory
205 terminated by another macro - as "parse error" message suggests,
206 it is likely to be error in macro "parse() { } [ fail ] { } done; "
207
208 :-)
209
210 7. We apologize for inconvenience
211 ---------------------------------
212
213 This documentation file is unfortunately incomplete.
214 HTML online documentation is comming soon ... sooner ... or later...
This page took 0.417801 seconds and 3 git commands to generate.