İlginç soru; bunu genellikle bir tasarım olarak görmezsiniz. Geçmişi kaydetmek için hafifçe benzer bir tekniği kullanan bir programım var, ancak ikili bir format kullanıyor. 'Günlük dosyası', tümü makineden bağımsız biçimde düzenlenmiş dört bölümden oluşur:
- Kullanılan listede ve boş listedeki sihirli numarayı ve (maksimum) girdi sayısını, bir sonraki geçmiş girdisinin sıra numarasını, kullanılan listedeki gerçek girdi sayısını, boş listedeki gerçek girdi sayısını içeren bir başlık ve dosyanın uzunluğu (her biri 4 bayt).
- Kullanılan liste, her girdi ofset ve uzunluk verir (her girdinin her bir kısmı için 4 bayt).
- Ücretsiz liste, her giriş kullanılan liste girişine benzer.
- Ana veriler, her geçmiş kaydı bir boş sonlandırıcı baytı tarafından sonlandırılan bitişik bir bayt kümesinden oluşur.
Yeni bir kayıt tahsis edildiğinde, serbest listede boşluk varsa, oradaki bir girişin üzerine yazar (mutlaka hepsini kullanmanıza gerek yoktur - bu durumda parça serbest listede kalır). Serbest listede yer olmadığında, sonunda yeni alan ayrılır. Eski bir kayıt döndüğünde, alanı serbest listeye taşınır ve bitişikteki serbest kayıtlarla birleştirilir. Kayıtların birçok satıra yayılabilmesi için SQL deyimlerini işlemek üzere tasarlanmıştır. Bu kod, belirtilen sayıda kayıt üzerinde çalışır. Dosyanın boyutunu sınırlandırmaz (ancak bunu yapmak zor olmaz).
Ana kod geçmişi kodu, SQLCMD programının kaynağından temin edilebilen history.c ve history.h olmak üzere iki dosyadadır (benim sürümüm, Microsoft'un değil; benimki Microsoft'tan on yıl veya daha önce var olan) Uluslararası Informix Kullanıcı Grubu Yazılım Arşivi . Ayrıca bir geçmiş dosyası döküm programı (histdump.c) ve bir geçmiş test cihazı (histtest.ec - ESQL / C olduğunu iddia ediyor, ancak kendisi gerçekten C kodu; çağırdığı destek işlevlerinden biri bazı Informix ESQL / C kullanıyor kütüphane fonksiyonları). Informix ESQL / C kullanmadan denemek isterseniz benimle iletişime geçin - profilime bakın. Tasarım ortamının dışında tarih yazısını derlemesi için bazı önemli değişiklikler var, ayrıca bir makefile'a ihtiyacınız var.