From 7f9fed74e1321bce148131febe943f85abd958e4 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Thu, 9 Aug 2007 13:33:55 +0000 Subject: [PATCH] Obscure backup of my unripe model ideas about libcevap (former libdax) --- doc/libdax_equip.gif | Bin 0 -> 10751 bytes doc/libdax_job.gif | Bin 0 -> 10532 bytes doc/libdax_model.txt | 658 ++++++++++++++++++++++++++++++++++++++++ doc/libdax_overview.gif | Bin 0 -> 12521 bytes 4 files changed, 658 insertions(+) create mode 100644 doc/libdax_equip.gif create mode 100644 doc/libdax_job.gif create mode 100644 doc/libdax_model.txt create mode 100644 doc/libdax_overview.gif diff --git a/doc/libdax_equip.gif b/doc/libdax_equip.gif new file mode 100644 index 0000000000000000000000000000000000000000..3df86aee659d6d21ff64a771e46b0272c777cad2 GIT binary patch literal 10751 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

iiOxdmNRsp>)m^ zeR558!H{|U(dgtu^aXR~$@_|nE%>?Y{W*=&1^3E@)aZq-&AyY@@LTE{nw3kt`%4wy z0#)HFW8EvwihS+Nt2fP8`lDHf$gAgM*WX`enHpW+xnEm4@LNN!YbUSm+4&t`)<{NQ zem=S2^u3X;xKYEpL`}cph1~phxCt1&`IC9>;(NU*^CEM&9S)KUA~x)fzoyIXyI< z@HRsp(kCCzivoHk)iMaq^g@TvGj@=5-F`YOx;o;93z}VfKPo-HG&#N;Hi;=Nw!E$S;!zo!)7Q+ zq0Q$Rx#ppEwb@99q$ihEM;#`-AjoF2cqU%0Ts1$f0X)>`{e*Z%p?&(TGiXaG@OI|( zdp+K<7%r&>hfIGwty+dYXSG2esOmeSCtZimvM=_ILkgsOWj#}FK(0yg>C9$YNmRLh zQHR?emh$7Im*VmB@>;VKzo4St-Oue2kgx+4KbPKaz>Xmo?7_`)Acogr6i?`j<3_&l z`-%+1Cy(o+rO9}q2f@)osv+cz65`DA@V;uJfd#V2DDEJH_EO@b=rgtOikxRQIWkrC zVEj?8Qy=n=t=LF%l`rQUoBN`#rRl09@b|=rJMg)~#u(>gtB<%Q1o)$BTZSh;HsbYs zKB*t!5(k$O2Gdo`(8}A6W$#7N6-nmqf8OmyfG0}jm=&@9%Ca_WR?E-E+FA~hgwP4KdH^f0k#r`V4)Cwr-2CRN~z;?T7K5>C21?+^P4E3ZW>VVzJEgQ6Q#_g0xx0zq>`we$drmKXPvqTyxNIR&_te7Q{AGiW=3#` zpg%`_+_Xl^s7gXvQx8euI`;jgpzF9PwL#*HUM4+}u1UURqOMuF84+AIX-N|<-}E#C zSL~qFT2vkoOw!fda86Lt21Rl$TWysmF6*BNY77|NY&FnvYe@c@^1I;FTJ^`Q=Y|Ki zc-I&Q6Qko72M^VTCgB5__+8&@ zQvs2RwASx{aoW`6GsW1}&6<0%RORZEZ`6!xHrchD^m-OH6szeSH`Rdo9XejTZ~YM4 z74hKEBaPMS*hd|#U!SZ&2S4fgYA^6}gxkXNgaIGobvDfVzU{I|kh;iXTFau%W!5Md zbTuZa40nb*P?Nc|ux7TcjQ@BcbQ|j8kan|t^JH)<@Z$OH>NYVR@%_(yx_1 zk-uO1ZSrT`A>M?vKRd4Y{p7idJSP@KQyTL}X?=_Oxd@8O;b;(>oAt!E3w+803!?)KT1K9+OpQ#mfkp8UvgQISUCo9nkD<88Rm^6MB)Y#P}3Ud>(RXh6AD8V2U z5}YNTGvPNU!KC?`Px(-fAc;$o*>ya;yyN@UcWx<;c9@lsgb7&^zEmaU*Km*dRI)9e zz6FA_ANF3f2J14?Lf4-@+CGv|T_h8--H*ov<6ymQW9Szx$%_dIG^KOMk)a74Fpazf zy`gWCRZ^OWqOQsF{y0z}?K%-(7(chENi-Po@n<}Aos7whSN@LT$c(cql-Wp@P;p`+ z38Jv{UJ%hcSa5i*l}|u};~>*%mRgy@m}mUOj!}_9NbS#*DFYX%SkY2xGHrTun-h{U z@MQtde75P1+MWqwuq4Mc=T`S?Geh z!Y@ix0@sqK+m3>mg1D-xu96TzzSd6Yp#GV)joiDXI% ze#XKLf(YjqWb!xYl4)uVV4Qk6Ca)G~>t!$kx^3UMUzxm?pRGC`>-k+SNA zni?T0-l^)pWHm}%HQcl%bxC{pW&_Y`aNTWRt8JjekW|v?&X@PiVi9>A%+4_&H6C^I$Lv28@^%tnVL*i zeG5^3-HBes{f4`#cO?ENJ=2muS5hYpPqG()>{)A;z=-!Gk#xy~k0LEvA=TcYQL;;F$0-6N(MDegz+n!~mSF zV_o+_Ri)~rF0V4DpLcEFqN-DB!nfJf=0|LWYEsqAO!_*KVZSn}KxeHML$+;Ekwdc;huJ=^`pP<18(Z$Qg~?;rx&}&H`##5M4z;VMX@f~;Lg_AUnw5Bfjo=q^?SLvnsjv2L1?%i$iBE%Y=7HDZ$IU)yttko zdE3K@7z%TsV3|N%HHK2!JBCxtui&{iX(-vF8^Sl|4e$Dmj_qO#)3-RH?*?qZ3Nbg2 z^Ncs{wZ82a+1T(c-r&0t7a^w~w4iMT_NK`+@MRwH)W-Y$+v&QDhBAkx1JKazY|n8Y zIC|;u$$M{pnrfiBV(DlX?*YEm-d#VsbbPD$uykeL(|odYqQC#J^2{L*`f~YHJNjXb zP`I&^-N#)lSfG~v4-qp$0ptVICp)}nc89OuRehn2@qj!AbsbiXCl{nqC|mTh@GQI_M(8Pm!xN+ z$8&fsmDo339sH9WyOqL;b2PL9V&w8-+pC0-wf1pGgqW_i;Bt7|RB0=GNNoN=%zmSF zU0jHRpq=BgNMJB_p0=G!p#5`TR}r>2`=Qup96@f0F78%wK~r&|FV(9HVtihLSS6h% ze33%KT@n%E68aLV?qZ!Got$J4W-kfi@b0ZN39K>+Mv4ybJHd(1rHbga@)4D1*pgp2 zKdX90iYcV1Nk|H)^{@|gYfa?^tKAt!Mup)W^Z>_l0qPV0&pH!K+ zfN7s-de%#SX}0t}$2WcX9(^JL(oW9Or0dec2wQ2tvOaGd85fB@qc~~r!@dCZVo%dl z@ki-^h<>j}E(aEDN7GjOS{Z^anT{X*k=fmmd6iL{e31kLB9qzCWwBNQvH-1YtBw@M z&z?krs-#x(guvXCJlU5u152MIe=ZJumuN|c%9djeWGPf;9KOkKB{LR~%VYUiK!M-( zNw%o$V=&OT7Fa7MZZA z&Ly<2YIsj#7>FfjxP$3c$prB;ZxoIK2wEQ)Zy}1!@naG z`lg0!>B8$bA(flMV)6qGIErW&3UAOy5EHF~;|hw?mxC2FinGqLGXnBe@gs8b1IZDT zpjJgx{t>V-bHhaG8l6(xIx}Q{#CqyoXIR;`Gi>Ke+opcyN<3`;5o^B|c1VGBI0ZYt z#5}%)ozlsjp<@kf%8RBebS@5G>MJn7hgt$hTe}s0n<`&KjJ8LB?`##GYUS_BMy~{v z{R0*5amI!>m9GTGu3MEa%Vf?kFnpNJ4zt&v zB`04fPIBf`aJfv9c~0_dk@MzHUKXqIj*Ro;jtERo)^1J;9SsUUQ!gTz62%=9<5W+T zm>OFgXMd*3EUChPJ4w4F$ns20I$xbFQe8%4Og3nOzShX`YBM{rAeyx!yoh5ZG7ga~j>BR79Hp*!S!C6OoEeA;r@}F8d z2D3kdrk%aDTok9>Bek3n<+DCLTE1(qUokK=5KFYop?)AFX&N+z604&u~! znoT3r9-JC6i-0B7X}Lem7dYv7^yp+g)6Qkp^%+r58_~%W)E!i3D!~xSx6{oj*OhMl znkX1EcuBdet}`*Ni?+6KTr*OE%eoMu`|69{Dki*GR*#tlUU$_$K7~`P68Ew@{NA&_ zF+ndm4{k!!*^di4@z>NSx5_hJ>^$x79n&~d`k(bO1)pZD5# z9-5M>Kgh{y$s&pvRummk>;ST{P#<5`5-bh!E08l`&c7AopqUwti*Tqva+u9D2ytX#P5F)DE>xCG5364XN_aK5%|}F7!=T5?(8~e1c1M=n{>d`2He)wIZ+=q#;$Yv^t2p(%^#g3U6&( zg9;~63SY>0j&iL5v`WNAifu3SMpKV;yBQ;Dfuz@1Wx_areU0jvgseb_9BlY*8AP2} z{8s9F@H@o%(dX|B_Uqhdt4#Il%swE->*WuKFN9RmEb1%QE~}rmR{%pJ4!n(mtM6X6 zs~p?v8S)#C-mAP)CP?oM9(xmk#39aQJzlWM=VNI$HZsWoi-_fZWW**3Fy>YMk4JT@5*Zx#qe2u^^4x zX+v0UdDQQGo7rL8-tiIIl%o<Z@ypPx?lKbzeou;A!83jWC3coDuY?sF7Lhu-DaQ(9m|o$F?`omaqK~8;$dD OoZ)B!*5d~N{Qm<)=B3*J literal 0 HcmV?d00001 diff --git a/doc/libdax_job.gif b/doc/libdax_job.gif new file mode 100644 index 0000000000000000000000000000000000000000..8138ad25c020c2bd196c53d1558849ab283f249e GIT binary patch literal 10532 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

H1>%I(H-k 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 +Version=1.0 +Since=11.03.2007 +Documentation=\ +The API is the only layer visible to the applications. It exposes MMC concepts +which it reflects and augments by its own architectural concepts. +Subordinates=EQUIP,JOB,AUX +Cgen=\ +cevapi +-m struct CevapeqP *equip +-m struct CevapjoB *job +-m struct CevapauX *aux +-m struct CevapgsT *gestures +@ +=end Class + +Class=EQUIP +Author=Thomas Schmitt +Version=1.0 +Since=11.03.2007 +Documentation=\ +EQUIP represents the physical and logical equipment in reach of libdax. +This includes the system, drives, media, and their current states. +PeerToPeer=GESTURES +Boss=API +Cgen=\ +cevapeqp +-v struct CevapI *boss +-m struct CevapeqpsyS *sys +@ +=end Class + +Class=JOB +Author=Thomas Schmitt +Version=1.0 +Since=11.03.2007 +Documentation=\ +JOB models the tasks to be performed via libdax. +This includes disc, session, track, source, fifo, dewav, burn options. +PeerToPeer=GESTURES +Boss=API +Cgen=\ +cevapjob +-v struct CevapI *boss +-m struct CevapjobtdO *todo +# >>> +@ +=end Class + +Class=AUX +Author=Thomas Schmitt +Version=1.0 +Since=11.03.2007 +Documentation=\ +AUX bundles any models which are neither EQUIP nor JOB. +This includes abort handler and message system. +PeerToPeer=GESTURES +Boss=API +Cgen=\ +cevapaux +-v struct CevapI *boss +# >>> +@ +=end Class + +Class=GESTURES +Author=Thomas Schmitt +Version=1.0 +Since=11.03.2007 +Documentation=\ +GESTURES ist the procedural repertoire which interconnects EQUIP, JOB, and AUX +and also provides to them the services from the SCSI oriented layers. +PeerToPeer=EQUIP,JOB,AUX +Subordinates=SCSI_CMD +Cgen=\ +cevapgst +-v struct CevapI *boss +# >>> +@ +=end Class + +Class=SCSI_CMD +Author=Thomas Schmitt +Version=1.0 +Since=11.03.2007 +Documentation=\ +SCSI_CMD represents the semantic part of SCSI (i.e. mainly MMC) specs. +This layer models each SCSI command that is used by libdax. It knows about +its parameters and constraints with particular equipment and jobs. +Boss=GESTURES +Subordinates=Classes with SCSI_EXEC Interface +=end Class + +Interface=SCSI_EXEC +Author=Thomas Schmitt +Version=1.0 +Since=16.03.2007 +Documentation=\ +SCSI_EXEC hides the difference between the implementation principle of +SCSI format+transport and the principle of SCSI service. +Boss=SCSI_CMD +Implementations=SCSI_FORMAT,SCSI_SERVICE +Cgen=\ +cevapsciexc +-v struct CevapscifmT *scsi_format +-v struct CevapscisvC *scsi_service +-v int silent_on_scsi_error +@ +=end Interface + +Class=SCSI_FORMAT +Author=Thomas Schmitt +Version=1.0 +Since=11.03.2007 +Documentation=\ +SCSI_FORMAT translates parameters of SCSI commands into CDBs, takes care for +transport and decodes the reply into parameters. +Boss=SCSI_CMD via SCSI_EXEC +Subordinates=SCSI_TRANSPORT +Cgen=\ +cevapscifmt +-v struct CevapsciexC *boss +-v struct CevapscitrN *scsi_transport +# >>> +@ +=end Class + +Class=SCSI_TRANSPORT +Author=Thomas Schmitt +Version=1.0 +Since=11.03.2007 +Documentation=\ +SCSI_TRANSPORT takes a formatted CDB from SCSI_FORMAT and makes the operating +system perform a SCSI transaction. It then returns the reply data in raw form. +Boss=SCSI_FORMAT +Os_specific=yes +Cgen=\ +cevapscitrn +-v struct CevapscifmT *boss +-v struct Burn_os_transport_drive_elementS *system_dep_drive_info +# >>> +@ +=end Class + +Class=SCSI_SERVICE +Author=Thomas Schmitt +Version=1.0 +Since=11.03.2007 +Documentation=\ +SCSI_SERVICE provides the combined services of SCSI_FORMAT and SCSI_TRANSPORT +via a set of parametrized functions which abstract SCSI command transactions. +Boss=SCSI_CMD via SCSI_EXEC +Os_specific=yes +Cgen=\ +cevapscisvc +-v struct CevapsciexC *boss +-v struct Burn_os_transport_drive_elementS *system_dep_drive_info +# >>> +@ +=end Class + +=end ClassDiagram=Overview + + + +ClassDiagram=Equip_overview + +Class=EquipSystem +Author=Thomas Schmitt +Version=1.0 +Since=16.03.2007 +Documentation=\ +EquipSystem is the inner root class of EQUIP. It describes the system on +which libdax is working. This includes the operating system, the system +adapter classes, the drives. +Boss=EQUIP +Subordinates=EquipDrive*N +Cgen=\ +cevapeqpsys +-v struct CevapeqP *boss +-m char *infotext +-l struct CevapeqpdrV *drives +-v struct CevapeqpdrV *eol_drive +# >>> be boss of SCSI_CMD ? +# >>> +@ +=end Class + + +Class=EquipDrive +Author=Thomas Schmitt +Version=1.0 +Since=16.03.2007 +Documentation=\ +EquipDrive represents a drive, including its capabilities, its processing +status, the media loaded. +Subordinates=EquipMedia +Boss=EquipSystem +Cgen=\ +-l cevapeqpdrv +-v struct CevapeqpsyS *boss +-m struct CevapeqpmdA *media +-m char *devname +-v int bus_no +-v int host +-v int id +-v int channel +-v int lun +-v int phys_if_std +-m char *phys_if_name +-v struct CevapsciexC *BURN_OS_TRANSPORT_DRIVE_ELEMENTS +-v int global_index +# >>> -v pthread_mutex_t access_lock +-v int current_feat2fh_byte4 +-v volatile int released + +# >>> next to process: transport.h : int complete_sessions +# >>> + +@ +=end Class + + +Class=EquipMedia +Author=Thomas Schmitt +Version=1.0 +Since=16.03.2007 +Documentation=\ +EquipMedia represents an optical disc, including its type, its writeability, +its formatting, its available formats and performances. +Subordinates=\ +EquipProfile*N,EquipFormat*N,EquipPerformance*N,EquipStatus,EquipMulticaps +Boss=EquipDrive +Cgen=\ +cevapeqpmda +-v struct CevapeqpdrV *boss +-m struct CevapeqpstA *status +-l struct CevapeqpprO *profiles +-v struct CevapeqpprO *eol_profile +-v int current_has_feat21h +-v int current_feat21h_link_size +-v int needs_close_session +-v int bg_format_status +-v int format_descr_type +-v off_t format_curr_max_size +-v unsigned int format_curr_blsas +-v int best_format_type +-v off_t best_format_size +-l struct CevapeqpfmT *format_descriptors +-v struct CevapeqpfmT *eol_format_descriptor +-v int nwa +-v int start_lba +-v int end_lba + +# >>> +@ +=end Class + + +Class=EquipProfile +Author=Thomas Schmitt +Version=1.0 +Since=16.03.2007 +Documentation=\ +EquipProfile maps a MMC profile into libdax (See mmc5r03c.pdf chapter 5). +A profile describes a set of features and may be either current, possible, +disabled, or unavailable. +Subordinates=EquipFeature*N +Boss=EquipMedia +Cgen=\ +-l cevapeqppro +-v struct CevapeqpmdA *boss +-v int profile_code +-v char *profile_text +-v int is_cd_profile +-v int is_supported_profile +-l struct CevapeqpftR *features +-v struct CevapeqpftR *eol_feature +# >>> +@ +=end Class + +Class=EquipFeature +Author=Thomas Schmitt +Version=1.0 +Since=16.03.2007 +Documentation=\ +EquipFeature maps a MMC feature into libdax (See mmc5r03c.pdf chapter 5). +A feature describes a set of SCSI commands and (implicitely) of use cases. +Boss=EquipProfile +Cgen=\ +-l cevapeqpftr +# >>> +@ +=end Class + +Class=EquipFormat +Author=Thomas Schmitt +Version=1.0 +Since= +Documentation=\ +>>> EquipFormat +Boss=EquipMedia +Cgen=\ +-l cevapeqpfmt +# >>> +@ +=end Class + +Class=EquipPerformance +Author=Thomas Schmitt +Version=1.0 +Since= +Documentation=\ +>>> EquipPerformance +Boss=EquipMedia +Cgen=\ +cevapeqppfm +# >>> +@ +=end Class + +Class=EquipStatus +Author=Thomas Schmitt +Version=1.0 +Since=17.3.2007 +Documentation=\ +EquipStatus represents the status of media and drive. This includes +blank/appendable/closed, progress indicator. +Boss=EquipMedia +Cgen=\ +cevapeqpsta +-v struct CevapeqpmdA *boss +-v int status +-m char *status_text +-v struct CevapeqpprO *current_profile +@ +=end Class + +Class=EquipMulticaps +Author=Thomas Schmitt +Version=1.0 +Since= +Documentation=\ +>>> EquipMulticaps +Boss=EquipMedia +=end Class + +# >>> need EquipDisc for describing the table of content +# >>> ??? Define AuxDisc class as common part of EquipDisc , JobDisc + +=end ClassDiagram=Equip_overview + + +ClassDiagram=Job_overview + +Class=JobTodo +Author=Thomas Schmitt +Version=1.0 +Since=18.3.2007 +Documentation=\ +JobTodo records what is to be done during a job. This includes peripheral +actions like tray load/eject and central actions like blank, format, burn. +Subordinates=JobDisc,JobOptions +Cgen=\ +cevapjobtdo +# >>> +@ +=end Class + +Class=JobDisc +Author=Thomas Schmitt +Version=1.0 +Since=18.3.2007 +Documentation=\ +JobDisc models a not yet existing disc structure which is to be created. +Subordinates=JobSession*N +Boss=JobTodo +=end Class + +Class=JobSession +Author=Thomas Schmitt +Version=1.0 +Since=18.3.2007 +Documentation=\ +JobSession represents a recording session. A session usually bundles +several tracks. Traditionally the last session of a disc is recognized +by operating systems as the thing to be mounted. +Subordinates=JobTrack*N,JobFifo +Boss=JobDisc +=end Class + +Class=JobTrack +Author=Thomas Schmitt +Version=1.0 +Since=18.3.2007 +Documentation=\ +JobTrack represents a track to be recorded. A track mainly is associated with +a data source but in many cases it also becomes a recognizable entity on the +target media. +Subordinates=JobBlock*N,JobTrackFilter,JobSource +Boss=JobSession +=end Class + +Class=JobBlock +Author=Thomas Schmitt +Version=1.0 +Since=18.3.2007 +Documentation=\ +JobBlock represents a single output data transaction unit. On CD this is +the same as an addressable media block resp. sector. On DVD this might be +an addressable block od 2k or a packet of e.g. 32k. +Boss=JobTrack +Cgen=\ +cevapjobblk +-v int alba +-v int rlba +# >>> +@ +=end Class + +Class=JobSource +Author=Thomas Schmitt +Version=1.0 +Since=8.4.2007 +Documentation=\ +JobSource represents a data source for a track. Typically this is a disk +file or a stream file descriptor like stdin. +Subordinates=JobSourceBlock*N +Boss=JobTrack +=end Class + +Class=JobSourceBlock +Author=Thomas Schmitt +Version=1.0 +Since=8.4.2007 +Documentation=\ +JobSourceBlock represents a single input data transaction unit. +Boss=JobSource +=end Class + +Class=JobFifo +Author=Thomas Schmitt +Version=1.0 +Since=8.4.2007 +Documentation=\ +JobFifo reads data via JobTrackFilter and buffers them until JobBlock can +accept them. +Boss=JobSession +=end Class + +Class=JobTrackFilter +Author=Thomas Schmitt +Version=1.0 +Since=8.4.2007 +Documentation=\ +JobTrackFilter reads data from JobSourceBlock, processes them and presents +them to JobFifo or JobBlock. This includes stripping of .wav headers. +Boss=JobTrack +=end Class + +Class=JobOptions +Author=Thomas Schmitt +Version=1.0 +Since=18.3.2007 +Documentation=\ +JobOptions bundles the adjustable parameters of a job. This includes dummy +mode, speed, appendability, blank mode, format selection, write mode, +underrun protection, random access addressing. +Boss=JobTodo +=end Class + +Class= +Author=Thomas Schmitt +Version=1.0 +Since= +Documentation=\ +=end Class + +=end ClassDiagram=Equip_overview + +# >>> a dummy to be integrated into the model +Cgen=\ +burn_os_transport_drive_elements +@ + + +=end Model=libdax + +---------------------------------------------------------------------------- +Notes: +---------------------------------------------------------------------------- + + Generate C stubs: + test_dir=...where_to_generate_the_stub... + model_dir=...where_to_find_the_model_file_libdax_model.txt... + xtr_dir=...where_to_find_the_extractor_script_extract_cgen_input.sh... + cgen_dir=...where_to_find_the_cgen_binary... + + /bin/rm "$test_dir"/cevap*.[cho] \ + "$test_dir"/burn_os_transport_drive_elements*.[cho] \ + "$test_dir"/a.out + cd "$test_dir"/ + cat "$model_dir"/libdax_model.txt | \ + "$xtr_dir"/extract_cgen_input.sh | \ + "$cgen_dir"/bin/cgen -no_stic -ansi -global_include cevap_global.h + + Compile: + ( cd "$test_dir" ; cc -g -c *.c 2>&1 | less ) + +---------------------------------------------------------------------------- +~/projekte/cdrskin_dir/libburn-develop/libcevap/extract_cgen_input.sh : + +#!/bin/sh + +copy_mode=0 + +while true +do + read line + if test "$copy_mode" = "0" + then + if echo " $line" | grep '^ Cgen=' >/dev/null 2>&1 + then + copy_mode=1 + if echo " $line" | grep '^ Cgen=..' >/dev/null 2>&1 + then + echo " $line" | sed -e 's/^ Cgen=//' + fi + elif echo " $line" | grep '^ =end Model=' >/dev/null 2>&1 + then +break + fi + else + if test " $line" = " @" + then + copy_mode=0 + echo "@" + else + echo " $line" | sed -e 's/^ //' + fi + fi +done + +---------------------------------------------------------------------------- + +Description of CgeN + +cgen produces a class stub in C programming language. The data structure of +the class is described by some lines which get read from stdin. The stub will +consist of two files .h and .c which emerge in the +current working directory. +It will define a struct for representing the class data aspects, +construtor _new(), destructor _destroy(), +getter __get() for each structure element. +Some more functions get added for particular class and element roles. + +After first generation, there is no further support by cgen. It simply refuses +to overwrite existing files because it supposes that those contain code added +by the human programmer. +Those programmer enhancements are supposed to include explanatory comments, +class specific methods, initial element values and other special precautions +within the generated functions. + + +Command line options + + -no_stic prevents usage of stic_dir/s_tools/*.[ch] + + -ansi generates ANSI C function heads and makes file .h hold + only public definitions: an opaque declaration of the class struct + and a list of function prototypes. The definiton of the class + struct is then in _private.h . + -global_include filename + sets the name of a file which will contain globally necessary + declarations. Currently it lists the existence of all class + structs. + +A class can have one of two roles: + +- Standalone class. + Input example: + my_class + +- Listable class, which has pointers to peer instances: .prev and .next + Such classes get a list destructor _destroy_all() which destroys + all members of a list (which is given by any of the list members). + There is a function _link() which inserts an instance into a list. + Input example: + -l my_class + +Elements have one of the following roles: + +- Value. It provides only storage for a C data type (which may be a C pointer + despite the role name "value"), a getter method __get(), + and a setter method __set(). + Input examples: + -v int i + -v int a[100] + -v char *cpt + -v struct xyz x + -v struct xyz *xpt + +- Managed. This has to be a pointer to a struct or to char. It will not + get attached to an object by the stub's code but its destructor + _destroy() will be called by _destruct(). In case of (char *) + it is supposed that a non-NULL value has been allocated by malloc(). + Managed (char *) types get a setter function __set() + which allocates memory and copies the textstring from its parameter. + Input examples: + -m struct XyZ *xyzpt + -m char *textstring + +- Chainlink. A pair of prev-next-style pointers to the own class struct. + Function _destruct() will unlink the affected instance and + put together its link partners. + Input example (there must always be two consequtive -c lines): + -c struct My_clasS *up + -c struct My_clasS *down + +- List. A pair of pointers to the struct of a listable class. The first + one holds the start of the list, the second one holds the end. + For insertion of list items there is provided method _new_(). + The inserted item is then content of the pointer. + _destroy() instance calls _destroy_all(). There is a method + _set_() which should be used with caution, if ever. + Input example (there must always be a -l and a -v line): + -l struct XyZ *list_start + -v struct XyZ *list_end + + +Example run: + + bin/cgen <<+ +-l class_x +-v int x +-m struct Class_Y *y +-m char *text +-c struct Class_X *boss +-c struct Class_X *slave +-l struct Class_X *providers +-v struct Class_X *last_provider +@ ++ + + diff --git a/doc/libdax_overview.gif b/doc/libdax_overview.gif new file mode 100644 index 0000000000000000000000000000000000000000..f4e5715cf9359fb244032880551ea6d24a2dfc7c GIT binary patch literal 12521 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