Càrrega inicial

Versió inicial de l'script python.
Document d'especificació del format.
Actualització del README.md.
This commit is contained in:
Enric Lleal Serra 2024-08-29 17:03:30 +02:00
parent 51ab386d1f
commit 0de11f4e66
3 changed files with 531 additions and 2 deletions

373
FILEID.TXT Normal file
View File

@ -0,0 +1,373 @@
FILEID.TXT v1.9 by Richard Holler [CIS 73567,1547]
Last Revision 05/17/94
This text file was prepared at the request of the ASP (Association of
Shareware Professionals), but the information contained in it may be of
value to any shareware author.
FILE_ID.DIZ INFORMATION
-----------------------
Basically, the FILE_ID.DIZ file is a straight ASCII text file, distributed
inside your distribution archive file along with your program files, which
contains a description of your program. This file will be used by most BBS
(Bulletin Board System) softwares for the online file description of your
file. We recommend that the FILE_ID.DIZ file be used in all of your
distribution archives.
This text file contains a description of the FILE_ID.DIZ file, as well as a
description of the recommended distribution archive format.
WHY SHOULD YOU USE FILE_ID.DIZ?
-------------------------------
The use of this file will insure that the online description of your
program will be in your own words (and who better to describe your program
than yourself?), and that it will remain the same no matter how many
different people upload your file to various BBS systems.
As more and more BBS software makes use of this file, you can be assured
that your own description will replace such online descriptions as "Cool
Program" or "OK utility, but needs better ..."
Please note that the ASP Hub Network, the Author Direct FDN (File
Distribution Network), and the majority of other electronic distribution
services *REQUIRE* that a valid FILE_ID.DIZ file be contained in your
submitted distribution archive. If your file doesn't contain a valid
FILE_ID.DIZ file, then it simply won't be distributed by these services.
Furthermore, most BBS sysops will not accept uploads of files which do not
contain a valid FILE_ID.DIZ file, so you automatically lose out on that
distribution as well.
DESCRIPTION:
------------
FILE_ID.DIZ was created by Clark Development for use with their PCBDescribe
utility, as a means for shareware authors to provide descriptions for their
products, and thus so that BBS callers can upload the file(s) without
having to manually type in a file description.
As long as an author creates and includes a FILE_ID.DIZ file in their
distribution fileset, the text from that file will be used for the online
description (in most cases) rather than anything typed in by the uploader.
It also ensures that the online description is always the same regardless
of the number of different BBS systems the file is posted on. It has since
been accepted by the BBS industry more-or-less as the "standard" file
description source. (The extension of "DIZ" actually stands for
"Description In Zip").
NOTE: The FILE_ID.DIZ file *MUST* be named exactly that, and *NOT*
something like <filename>.DIZ. It will *ONLY* be used if it is named
FILE_ID.DIZ!
The FILE_ID.DIZ file is nothing more than a straight ASCII text file which
contains the full description of the archived file containing it. It is
used by most popular BBS software to describe your program, rather than
using the description supplied by the person that uploaded your file. It
should be placed *INSIDE* your distribution archive file. The FILE_ID.DIZ
file is defined by its creators (Clark Development) as being created by the
program author, and *NOT* the end user who is trying to upload the program.
The BBS software will "look" inside the archive file. If a FILE_ID.DIZ file
is found, it will replace any existing online file description with the
text contained in FILE_ID.DIZ. It is an excellent method for making sure
that your program files are described the way that "you" want them
described. Even sysops who's software can't automatically make use of the
FILE_ID.DIZ file have found it to be an excellent source for their manually
added file descriptions.
STRUCTURE:
----------
The file consists of straight ASCII text, up to 10 lines of text, each line
being no more than 45 characters long. It should *NOT* contain any blank
lines, any form of centering or formatting, or any Hi-ASCII or ANSI
characters. (i.e. it should ONLY contain alpha & numeric characters).
We recommended that it consist of 5 basic parts:
1. the proper name of your program
2. the version number
3. the "ASP" identifier (optional, for ASP members)
4. the description separator
4. the description
All of the above parts should be separated by a single "space".
PROGRAM NAME: To set it apart from the rest, it is recommended that you use
ALL CAPS for the program name.
VERSION NUMBER: The version number should be in the form of "v12.34".
ASP IDENTIFIER: If you are an ASP author, we recommend that an "<ASP>"
identifying mark be added after the version number, to identify your
product as an ASP-authored product.
DESCRIPTION SEPARATOR: To separate the actual description text, insert a
simple "-" (dash/minus) character after the ASP identifier (or version
number, if not using the ASP identifier), and in front of the description
text.
DESCRIPTION: You should attempt to FULLY describe your product, including
its most important functions and features. Be sure to include anything
which will separate your program from it's competition, and make the BBS
user want to download your file. Also try to include any hardware or
software requirements that your product may have.
You should try to use the first 2 lines of the text to give a basic
description of your program. This is helpful for sysops who's BBS software
limits them to less than 10 lines, 45 characters. Sysops who are limited to
using shorter descriptions can simply use the 1st two lines and truncate
the rest. Thus, you can basically still supply your own description for BBS
software which does not actually utilize the FILE_ID.DIZ feature.
The remaining lines of text can be used to elaborate on the programs
features, enhancements from the prior version, information concerning
multi-file sets. Please note that older versions of some BBS software can
only use 8 lines of text. It is advisable that you create your FILE_ID.DIZ
file so that the file can be truncated to various line lengths without
destroying it's usefulness.
EXAMPLE
-------
MY PROGRAM v1.23 <ASP> - A program which will
do anything for anybody. Will run in only 2k
of memory. Can be run from the command line,
or installed as a TSR. Completely menu-
driven. Version 1.23 reduces the previous 4k
memory requirements, and adds an enhanced
graphical user interface. Also, MY PROGRAM
now contains Windows and DESQview support.
Coming soon - an OS/2 version.
From Do-It-All Software, Inc. $15.00
MULTIPLE DISK INFO
------------------
Please note that if your distribution archive requires multiple archive
files, you should create a separate, specific FILE_ID.DIZ file for each
archive. This can be utilized to describe the various contents of each
archive, and to identify each disk in the set. For example, the FILE_ID.DIZ
file for disk #1 could contain:
"MY PROGRAM v1.23 <ASP> Program Executable
Files - Disk 1 of 2"
[followed by detailed description text]
while the FILE_ID.DIZ file for disk #2 could contain:
"MY PROGRAM v1.23 <ASP> Documentation Files -
Disk 2 of 2"
[followed by more detailed description text]
Optionally, you could also create a "complete" FILE_ID.DIZ file for the
first disk, which would fully describe the program in detail, and identify
it as Disk 1 of x. Then, for each remaining file in the set, simply include
the Program Name, version number, ASP identifier, and the disk number (i.e.
"MY PROGRAM v1.23 <ASP> Disk 2 of x").
ADDITIONAL INFO
---------------
Please don't be tempted to use fancy graphic or ANSI sequences in the
FILE_ID.DIZ file, as most BBS software will not allow this, and will render
your FILE_ID.DIZ file useless. Also, don't be tempted to simply copy your
program description file to FILE_ID.DIZ. Attempting to "format" your
FILE_ID.DIZ file (i.e line centering, right & left justification, etc) will
also cause unexpected results, especially for BBS software which re-formats
descriptions to other than 10line/45char.
Fred Hill <ASP> has written a freeware utility which interactively creates
a valid FILE_ID.DIZ file. The file is called DIZGEN.ZIP, and is included
with this distribution archive. I highly recommend that you use this
utility for creating your FILE_ID.DIZ files.
<*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*><*>
The following is a recommendation for the structure and contents of
distribution archives prepared for use on BBS systems.
DISTRIBUTION DISK RECOMMENDATIONS
---------------------------------
The following are recommendations for preparing your program files for
distribution to Bulletin Board Systems (BBSs) via the ASP's distribution
services, as well as other methods.
Two varieties of program files are defined here:
1) Program files which utilize an "install" utility and self-extracting
program archives (later referred to as "Author-Installed Programs").
2) Programs files which do not use install utilities or self-extracting
archives (later referred to as "User-Installed Programs").
AUTHOR-INSTALLED PROGRAMS:
--------------------------
These programs require a bit more work from the author, but will eliminate
many user mistakes, especially in programs which require complicated
setups.
Most "installation" utility programs will make use of program files which
have been "archived" into Self-Extracting (SFX) archives. We will attempt
to define which files should be contained in the Self-Extracting archives,
and which files should not.
1. Files which should be contained in the self-extracting program file
archive:
a. All program-specific executable files.
b. Any required configuration and/or data files required by the
program.
c. Program documentation files. Optionally, these may be left
outside of the self-extracting archive, in order to allow
them to be viewed/read by the various archive viewing utlities.
d. Any other program-specific files that are required for the
operation of the program.
2. The files described above should be compiled into a self-extracting
archive file, which will then be extracted by the install utility.
NOTE: the author is required to abide by any distribution requirements
specified by the archive utility author, and to obtain any required
distribution rights necessary. Please check to see if distribution rights
are required for your archive utility choice.
3. Files which should NOT be contained in the self-extracting program file
archive:
a. The install utility itself (obviously).
b. The FILE_ID.DIZ file. (described in detail in the section
preceding this one)
c. Any distribution/information files, such as VENDOR.TXT,
SYSOP.TXT, etc.
d. Any description or information file, such as DESCRIBE.TXT.
e. A user file (such as README.1ST), which should explain how
to use the install utility, what the user should expect
during the installation, and any preparation that the user
should make prior to the installation. This file might also
contain a brief description of your program, in case the user
is able to read the documentation files in the distribution
archive prior to downloading (many BBS systems offer this
ability to the user).
4. The actual distribution archive file (described below) should then
contain the install utility, the self-extracting program archive, and the
files described in #3 above.
USER-INSTALLED PROGRAMS:
------------------------
This type of distribution archive is much simpler than the Author-Installed
variety. It should simply be an archive file, containing all of the files
for the program described above.
Since this type of program requires the user to do all of the installation
manually, it should contain very specific and detailed information
regarding the installation requirements (such as INSTALL.TXT).
THE DISTRIBUTION ARCHIVE FILE:
------------------------------
The actual distribution archive file should merely be an archive file
containing the files described above. For BBS distribution, this archive
should be of the standard archive format, and -NOT- a self-extracting
archive. Many sysops will not allow self-extracting archives, and most BBS
software will not allow self-extracting archives to be uploaded.
There are many popular archive utilities available, such as PKZIP, LHA,
LHARC, ARJ, etc. Most BBS systems are capable of handling archives in
virtually any format. However, you should be aware that most BBS systems
will convert your archive format to the format of choice by the sysop. By
following the methods described above, this conversion process should not
affect your program, or any self-extracting files which are contained
within your distribution archive file.
You should also retain the default archive file extension defined by the
archive utility. For example, PKZIP uses a ".ZIP", LHARC uses "LZH", etc.
Changing the file extension may cause the BBS software to delete your file
because it doesn't recognize the format.
For the actual filename for your distribution archive, it is recommended
that the program filename be limited to 6 characters to represent the
program's name (i.e. MYPROG could represent "My Program"). This should be
followed by 2 numeric digits which will represent the version number of
your release. Even if this is your initial release it should include the
version number in the filename (i.e. MYPROG10.ZIP would indicate the
program called "My Program" version 1.0).
Please note that CompuServe limits filenames to only 6 characters. By
limiting the file "name" to 6 characters, you will easily be able to rename
the archive for CompuServe uploading by simply removing the 2-digit version
identifier, to make the file compatible with CompuServe libraries.
By including the 2-digit version number in the archive filename, it will be
very easy for both the user and the sysop (and yourself) to identify older
versions of your program.
MULTIPLE DISTRIBUTION ARCHIVES
------------------------------
At one time, it was recommended that your final distribution archive not be
larger than 350k, so that it would fit on a single 360k floppy disk and
still leave room for any distribution files necessary for Disk Vendors.
(i.e. Disk Vendors will often include their own GO.BAT file, or other
various small files to help their customers install the software). This
limitation is slowly falling by the wayside as more and more computer
systems have 3.5" floppy disk drives as standard.
If your program is large enough to require more than one distribution
archive, it is recommended that your filename be limited to 5 characters
rather than 6 as described above. Following the 5-character name should be
the same 2-digit version number. Then, append a single "letter" to identify
the disk (i.e. MYPGM10A.ZIP, MYPGM10B.ZIP, etc.). For uploading to
CompuServe, these filenames may then be shortened to 6 characters by
removing the version identifiers (i.e. MYPGMA.ZIP, MYPGMB.ZIP). However,
for CompuServe it is recommended that you simply create a single
distibution file, and eliminate the multi-part file set.
If your program requires multiple distribution archives, -BE SURE- to
create separate FILE_ID.DIZ files for each distribution archive. Also, each
FILE_ID.DIZ file should contain disk number information pertaining to each
individual archive (i.e. Disk 1 of 3, Disk 2 of 3, etc.).
THE DISTRIBUTION DISK
---------------------
It is recommended that your distribution disk simply contain a ZIPd version
of your product. However, If you choose to supply "unarchived" files on a
distribution disk for Disk Vendor use, it is _VERY_ important that you
specify in your documentation a suggested archive filename, so that BBS
sysops can create archived files with the proper author-specified
filenames. This information should be contained in your SYSOP.TXT (or
VENDOR.TXT) file. If you don't supply a suggested archive file name, the
sysops will be forced to create the name themselves, thus you may end up
with thousands of versions of your products on BBS systems all over the
world, but all with different filenames.
Please note that the ASP Hub Network, and nearly every other electronic
distribution service *REQUIRE* that your files be submitted as an archived
file, using the ZIP format. Also note that many BBS sysops will not go to
the trouble of ZIPing your unarchived files for you. If you don't supply
them with an archived distribution version of your product, it might not
get distributed by BBSs.
If you supply your own disk labels, it is recommended that the ASP logo, or
at least the initials "ASP" be included on the label, so that anyone can
immediately identify your disk as an ASP member's software.
SUMMARY
-------
Your distribution disk should now be ready to submit to the various BBSs,
distribution services, and Disk Vendors.
You may choose to create a separate distribution disk for use by BBSs and
Disk Vendors. However, if you follow the above steps in preparing your
distribution archive file, a separate "Disk Vendor" disk is probably not
necessary. The majority of disk vendors will be able to accept your
distribution file/disk if it is prepared in the above described format.


View File

@ -1,3 +1,61 @@
# diz-generator
# Editor DIZ
Script 'python' per editar i generar fitxers de tipus 'file_id.diz'.
## Situació
En el meu dia a dia com a `SysOp` d'un `BBS`, necessito informar el contingut dels fitxers que poso a disposició dels meus usuaris a les diferents àrees de fitxers.
Per a tal efecte es va crear fa molts anys el format `file_id.diz`[^1], àmpliament reconegut i establert com a estàndard, amb una especificació tècnica [^2] ben definida.
Per tant, cada fitxer en la meva base de fitxers hauria de tenir inclòs un fitxer de tipus `file_id.diz` descrivint el seu contingut.
I aquests fitxers `file_id.diz`s'han de crear i editar.
## Problema
Hi ha disponibles infinitats d'editors de text, de tota mena i tecnologia, però cap d'específic per a tractar aquest tipus de fitxers. Dels pocs que hi ha, o són de tipus privatiu, o només funcionen en entorns `MS Windows`.
Pel que fa als editors generalistes, no permeten -o no he sabut trobar-ho- establir un format d'edició que preservi les dues grans condicions dels fitxers `file_id.diz`: un màxim de 10 línies, i un màxim de 45 caràcters per línia.
## Solució
Necessitava un editor multiplataforma, de codi obert, que permetés crear i editar els fitxers de tipus `file_id.diz`, que respectés els condicionants del seu format, i que fos usable i intuïtiu per al `SysOp` que el fes servir.
Per tant, he desenvolupat un *script* en `python`, que dona resposta a tots aquests requeriments. Donades les meves limitacions com a desenvolupador, m'he basat en la llibreria estàndard `tkinter`[^3] per a proveir una interfície gràfica -simple però efectiva- que doni aquesta usabilitat i funcionalitat.
Aquest *script* permet:
- Arrencar un `GUI` amb font monoespai per a visibilitzar uniformement les línies.
- Accedir a un panell d'exploració de fitxers navegable.
- Obrir, desar, visualitzar i editar textos de 10 línies i 45 caràcters per línia.
- Un comptador per línia amb els caràcters escrits en temps real sobre els 45 permesos.
- Línies independents entre sí, de manera que es pugui editar un text lliurement[^4].
- Tractar aquests textos com a `file_id.diz` o `elnomquesigui.diz`.
- Executar-se en qualsevol plataforma que diposi de `Python`, la biblioteca estàndard `tkinter` (i s'entén que un *Entorn d'Escriptori*[^5).
## Execució
Des de l'intèrpret de comandes:
```bash
python diz-editor-py
```
o en funció del vostre entorn:
```bash
python3 diz-editor-py
```
`<EOF>`
[^1]: https://en.wikipedia.org/wiki/FILE_ID.DIZ
[^2]: En aquest mateix repositori: [FILEID.TXT](https://shipyard.thefreebay.net/eotb/gui-diz-editor/src/branch/main/FILEID.TXT "FILE_ID.DIZ Specification v1.9 by Richard Holler")
[^3]: https://docs.python.org/3/library/tkinter.html
[^4]: Tot i que no es recomana, aprofitar les línies per fer [Art ASCII](https://ca.wikipedia.org/wiki/Art_ASCII "Viquipèdia").
[^5]: https://ca.wikipedia.org/wiki/Entorn_d%27escriptori

98
diz-editor.py Normal file
View File

@ -0,0 +1,98 @@
import tkinter as tk
from tkinter import filedialog, messagebox
import os
class DIZEditorApp:
def __init__(self, root):
self.root = root
self.root.title("DIZ Editor")
self.root.geometry("600x400")
self.filepath = None
# Fuente monoespaciada
self.monospace_font = ("Courier", 10)
# Text editing frame
self.text_frame = tk.Frame(self.root)
self.text_frame.pack(fill=tk.BOTH, expand=True)
self.text_vars = []
self.text_entries = []
self.char_counts = []
for i in range(10):
frame = tk.Frame(self.text_frame)
frame.pack(fill=tk.X)
text_var = tk.StringVar()
text_entry = tk.Entry(frame, textvariable=text_var, width=45, font=self.monospace_font)
text_entry.pack(side=tk.LEFT, fill=tk.X, expand=True)
char_count = tk.Label(frame, text="0/45")
char_count.pack(side=tk.RIGHT)
text_var.trace_add('write', self.update_char_count(text_var, char_count))
self.text_vars.append(text_var)
self.text_entries.append(text_entry)
self.char_counts.append(char_count)
# File explorer frame
self.file_frame = tk.Frame(self.root)
self.file_frame.pack(fill=tk.X)
self.file_label = tk.Label(self.file_frame, text="No file selected")
self.file_label.pack(side=tk.LEFT)
self.open_button = tk.Button(self.file_frame, text="Open", command=self.open_file)
self.open_button.pack(side=tk.LEFT)
self.save_button = tk.Button(self.file_frame, text="Save", command=self.save_file)
self.save_button.pack(side=tk.LEFT)
self.save_as_button = tk.Button(self.file_frame, text="Save As", command=self.save_as_file)
self.save_as_button.pack(side=tk.LEFT)
self.exit_button = tk.Button(self.file_frame, text="Exit", command=self.exit_app)
self.exit_button.pack(side=tk.RIGHT)
def update_char_count(self, text_var, char_count):
def callback(*args):
text = text_var.get()
if len(text) > 45:
text_var.set(text[:45])
char_count.config(text=f"{len(text)}/45")
return callback
def open_file(self):
filepath = filedialog.askopenfilename(filetypes=[("DIZ files", "*.diz")])
if filepath:
with open(filepath, 'r') as file:
lines = file.readlines()
for i in range(min(10, len(lines))):
self.text_vars[i].set(lines[i].strip())
for i in range(len(lines), 10):
self.text_vars[i].set('')
self.filepath = filepath
self.file_label.config(text=os.path.basename(filepath))
def save_file(self):
if self.filepath:
self.write_to_file(self.filepath)
else:
self.save_as_file()
def save_as_file(self):
filepath = filedialog.asksaveasfilename(defaultextension=".diz", filetypes=[("DIZ files", "*.diz")])
if filepath:
self.write_to_file(filepath)
self.filepath = filepath
self.file_label.config(text=os.path.basename(filepath))
def write_to_file(self, filepath):
with open(filepath, 'w') as file:
for text_var in self.text_vars:
file.write(text_var.get() + '\n')
def exit_app(self):
self.root.quit()
if __name__ == "__main__":
root = tk.Tk()
app = DIZEditorApp(root)
root.mainloop()