remco@tnoibbc.ibbc.tno.nl (Remco Bruyne) (02/14/90)
Posting-number: Volume 10, Issue 66 Submitted-by: remco@tnoibbc.ibbc.tno.nl (Remco Bruyne) Archive-name: c_cover/part01 Hello, This is a (yet another) program for printing cassette cartridge covers. The output is in the form of a postscript file. The program is written in C and should run on (almost) all machines supporting C and some simple stdio functions. I tested it on Atari ST (MWC) and several different UNIX systems. The layout of the output can be changed by editing a configuration file (extensive documentation included!). It should even be simple to make CD cartridge covers. I made TWO shar files which both have to be unpacked separately. The second one follows. Remco --------------cut here------------ #!/bin/sh # This is a shell archive. Remove anything before above line, # then unpack it by saving it in a file and typing "sh file". # - Files are being checked using wc. When an error has been found a # message will be generated. # - Files already existing will not be overwritten. The new file will # be given anothe random name. A message will then be generated. # - The exact protections of the files being shared are maintained. # Before sharing the file protections are saved and restored when # unshared. # # Shar file created : Wed Feb 7 15:37:01 MET 1990 # Shar file contains : c_cover.c catalog.c creat.c data.c defines.h del.c edit.c list.c menu.c mktmp.c new_it.c output.c params.c # echo x - c_cover.c if test -f c_cover.c then echo c_cover.c exists, putting output in $$c_cover.c OUT=$$c_cover.c else OUT=c_cover.c fi sed 's/^X//' > $OUT <<'@//E*O*F c_cover.c //' X#include "defines.h" X#include "xdefs.h" X X/*----------------------------------*\ X | Program to create cassettecovers | X | via interactive menus. | X | Put TABs in every 4th position | X | vi: ':set ts=4<CR>' | X | | X | Remco Bruyne | X\*----------------------------------*/ X Xextern void StartMesg(); Xextern void Clearup(); Xextern void ReadCatalog(); Xextern void CreatCover(); Xextern void DelCovers(); Xextern void EditCover(); Xextern void InitMenu(); Xextern void OutCovers(); Xextern void ReadACover(); Xextern void ShowCover(); X X Xmain() X{ X /* X * Init menus. This is for counting the number of items X */ X InitMenu(&MainMenu); X InitMenu(&TapeMenu); X InitMenu(&NoiseMenu); X InitParams(); X X#ifdef ATARI X ClearScreen(); X#endif /* ATARI */ X ClearScreen(); X StartMesg(); X X ReadCatalog(); X X while(1) { X switch(ChooseMenu(&MainMenu)) { X case LIST_COVERS: X if(NCatItems == 0) { X Attention("There are no covers available yet"); X continue; X } X ListCovers(ALL); X RetCont(); X break; X X case DEL_COVERS: X if(NCatItems == 0) { X Attention("There are no covers available yet"); X continue; X } X DelCovers(); X break; X X case CREAT_COVER: X CreatCover(); X break; X X case RD_COVER: X ReadACover(); X break; X X case EDIT_COVER: X EditCover(); X SaveCover(CurIt, CurCass); X SaveCatalog(); X break; X X case SHO_COVER: X ShowCover(); X break; X X case FILE_COVER: X if(NCatItems == 0) { X Attention("There are no covers available yet"); X continue; X } X OutCovers(TO_FILE); X break; X X case QUIT: X Clearup(); X return(0); X } X } X} X X X Xvoid XClearup() X{ X SaveCatalog(); X return; X} X X X Xvoid XStartMesg() X{ Xprintf(" *-------------------------------------*\n"); Xprintf(" | |\n"); Xprintf(" | CASSCOVER |\n"); Xprintf(" | |\n"); Xprintf(" *-------------------------------------*\n\n"); X Xprintf(" A PROGRAM FOR MAKING CASSETTE TAPE COVERS\n\n"); X Xprintf(" by R.M. Bruijne ..\n"); XNLines((SCRLINES-9)/2 - 4); Xprintf(" This is a PUBLIC DOMAIN program!\n\n\n\n"); XRetCont(); X XNLines(SCRLINES-8); Xprintf("CASSCOVER may be copied freely, but NOT for commercial purposes.\n\n"); X Xprintf("This program runs under all versions of UN*X, under VAX/VMS, on\n"); Xprintf("all MS-DOS machines, on ATARI ST and on some other systems.\n\n"); X Xprintf("There are no known bugs as yet (jan 1990),but when you find any,\n"); Xprintf("please report them to the author: remco@tnoibbc.ibbc.tno.nl.\n\n"); X Xprintf("The file CASSETTE.DAT is a configuration file. In this file you\n"); Xprintf("find the fonts, character sizes and the positioning of all texts\n"); Xprintf("and separation lines. See also the supplied documentation.\n\n"); X XNLines(SCRLINES-17); XRetCont(); Xreturn; X} @//E*O*F c_cover.c // chars=`wc -c < c_cover.c | awk '{ print $1}'` if test $chars != 2893 then echo 'c_cover.c' is $chars characters, echo should be 2893 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - catalog.c if test -f catalog.c then echo catalog.c exists, putting output in $$catalog.c OUT=$$catalog.c else OUT=catalog.c fi sed 's/^X//' > $OUT <<'@//E*O*F catalog.c //' X#include <stdio.h> X#include "xdefs.h" X X#define LINELEN 80 X#define CONTMAGIC "#X-CASS-CATALOG" X X Xextern CATITEM *NewCatItem(); X X X Xstatic char *CassCatalog = "CATALOG.CAS"; X Xvoid XReadCatalog() X{ X FILE *Fp; X CATITEM *TmpIt; X int LineNum; X X if((Fp = fopen(CassCatalog, "r")) == NULL) { X /* X * Catalog file is not there, so no covers are saved yet X */ X return; X } X X LineNum = 0; X if(CheckMagic(Fp) == -1) X return; X X LineNum++; X X while(1) { X X /* X * Read filename of cassettecover X */ X if(fgets(LineBuf, LINELEN-1, Fp) == NULL) { X /* X * No more lines X */ X fclose(Fp); X return; X } X X TmpIt = NewCatItem(); X LineNum++; X NullEnd(LineBuf, LINELEN-1); X X /* X * Check if legal line X */ X if(StringNDiff("#F", LineBuf, 2)) { X Panic("'#F' expected in catalogue file %s, on line %d", X CassCatalog, LineNum); X } X TmpIt->FileName = NewString(LineBuf+2); /* +2: skip #F */ X X X /* X * Read descriptionline of cassettecover X */ X if(fgets(LineBuf, LINELEN-1, Fp) == NULL) { X Panic("'#D' expected in catalogue file %s, after line %d\n", X CassCatalog, LineNum); X } X LineNum++; X NullEnd(LineBuf, LINELEN-1); X X /* X * Check if legal line X */ X if(StringNDiff("#D", LineBuf, 2)) { X Panic("'#D' expected in catalogue file %s, line %d", X CassCatalog, LineNum); X } X TmpIt->Description = NewString(LineBuf+2); /* skip #D */ X X AddCatItem(TmpIt); X } X} X X X X Xvoid XSaveCatalog() X{ X FILE *Fp; X CATITEM *It; X X if((Fp = fopen(CassCatalog, "w")) == NULL) { X /* X * Catalog file is not there, so no covers are saved yet X */ X Panic("Can't write catalogue file %s"); X } X X fprintf(Fp, "%s\n", CONTMAGIC); X X for(It = FirstCatIt; It != (CATITEM *)0; It = It->Next) { X fprintf(Fp, "#F%s\n", It->FileName); X fprintf(Fp, "#D%s\n", It->Description); X } X fclose(Fp); X return; X} X X X X X X X X/*------------------------------------------------------*\ X | Check if a magic string is in the catalog file | X\*------------------------------------------------------*/ XCheckMagic(Fp) XFILE *Fp; X{ X X /* X * Read magic of this file X */ X if(fgets(LineBuf, LINELEN-1, Fp) == NULL) { X /* X * No information in this file X */ X fclose(Fp); X return(-1); X } X X NullEnd(LineBuf, LINELEN-1); X X if(StringDiff(LineBuf, CONTMAGIC)) { X fclose(Fp); X Panic("File %s is not a cover catalogue file!", CassCatalog); X } X return(0); X} X X X X X X X/*----------------------------------------------*\ X | Add a catalog item at the end of the list | X\*----------------------------------------------*/ Xvoid XAddCatItem(It) XCATITEM *It; X{ X It->Next = (CATITEM *)0; /* It always added at the end */ X It->Status = (flag)0; X X /* X * Is it the first item ? X */ X if(FirstCatIt == (CATITEM *)0) { X FirstCatIt = It; X LastCatIt = It; X NCatItems = 1; X return; X } X X /* X * Insert It at the end of the list X */ X if(LastCatIt == (CATITEM *)0) { X Panic("LastCatIt == 0"); X } X LastCatIt->Next = It; X LastCatIt = It; X NCatItems++; X return; X} @//E*O*F catalog.c // chars=`wc -c < catalog.c | awk '{ print $1}'` if test $chars != 2938 then echo 'catalog.c' is $chars characters, echo should be 2938 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - creat.c if test -f creat.c then echo creat.c exists, putting output in $$creat.c OUT=$$creat.c else OUT=creat.c fi sed 's/^X//' > $OUT <<'@//E*O*F creat.c //' X#include <stdio.h> X#include "xdefs.h" X#include "defines.h" X X Xextern void InSongs(); Xextern void MkTmp(); X Xvoid XCreatCover() X{ X int CountsWanted = 0; X X ClearCurr(); X X CurIt = NewCatItem(); X /* X * define a filename for this cover X */ X MkTmp(Buf); X CurIt->FileName = NewString(Buf); X CurIt->Description = (char *)0; /* CurIt was created with malloc() */ X /* X * Let char pointers point to empty string X */ X CurCass->BackCode = (char *)0; X CurCass->BackTl1 = (char *)0; X CurCass->BackTl2 = (char *)0; X CurCass->Side1 = (SONG *)0; X CurCass->Side2 = (SONG *)0; X X InDescription(CurIt); X InTapeType(); X InNoiseRed(); X InBackCode(); X InBackTitle(1, &(CurCass->BackTl1)); X InBackTitle(2, &(CurCass->BackTl2)); X X /* X * Start inputting songs X */ X CountsWanted = AskIfCountsWanted(1); X InSongs(1, CountsWanted, &(CurCass->Side1)); X X CountsWanted = AskIfCountsWanted(2); X InSongs(2, CountsWanted, &(CurCass->Side2)); X X /* X * We now entered an entire cassette, so X * insert into the catalog and store the cover info in file X */ X SaveCover(CurIt, CurCass); X AddCatItem(CurIt); X SaveCatalog(); X return; X} X X X Xvoid XInDescription(It) XCATITEM *It; X{ X NLines(SCRLINES - 10); X printf(" With which text may this cover be saved ?\n"); X NLines(1); X printf(" This text is shown in the catalogue of\n"); X NLines(1); X printf(" cassette covers.\n"); X NLines(1); X printf(" It may not be longer than 60 characters:\n"); X NLines(3); X printf(" ............................................................|\n"); X printf(" Text: "); fflush(stdout); X X gets(Buf); X NullEnd(Buf, 60); X X if(Buf[0] == '\0') { X StringCopy("There is no describing text with this cover", Buf); X } X X if(It->Description != (char *)0) /* In case we are editing ... */ X free(It->Description); X X It->Description = NewString(Buf); X return; X} X X X Xvoid XInTapeType() X{ X int TChoice; X X TChoice = ChooseMenu(&TapeMenu); X switch(TChoice) { X case FEO3: X case CRO2: X case FECR: X case METAL: X CurCass->TapeType = TChoice; X break; X default: X CurCass->TapeType = NONE; X break; X } X return; X} X X X Xvoid XInNoiseRed() X{ X int NChoice; X X X NChoice = ChooseMenu(&NoiseMenu); X X switch(NChoice) { X case DOLBY_B: X case DOLBY_C: X case DBX: X case HXPRO: X case NO_NR: X CurCass->NoiseReduction = NChoice; X break; X default: X CurCass->TapeType = NO_NR; X break; X } X return; X} X X X Xvoid XInBackCode() X{ X NLines(SCRLINES - 8); X printf(" Which code do you want to have printed on the back of\n"); X NLines(1); X printf(" the cover ? It may not be longer than %d characters :\n", CodeLen); X NLines(4); X printf(" Back-code: "); fflush(stdout); X X gets(Buf); X NullEnd(Buf, CodeLen); X /* X * When we are editing an exisiting cover, X * free the previous string X */ X if(CurCass->BackCode != (char *)0) X free(CurCass->BackCode); X CurCass->BackCode = NewString(Buf); X return; X} X X X XInBackTitle(Num, BackTl) Xint Num; Xchar **BackTl; X{ X int i; X X NLines(SCRLINES - 10); X printf(" Which text do you want to have printed on the back of\n"); X NLines(1); X printf(" the cover for side %d ?\n", Num); X NLines(1); X printf(" This text may not be longer than %d characters:\n", BTLen); X NLines(3); X printf(" "); X for(i = 0; i < BTLen; i++) X printf("."); X printf("\n"); X X printf(" Text: "); fflush(stdout); X X gets(Buf); X NullEnd(Buf, BTLen); X /* X * If there is an exisiting backtitle, free it. X */ X if(*BackTl != (char *)0) X free(*BackTl); X *BackTl = NewString(Buf); X return; X} X X X X XAskIfCountsWanted(Side) Xint Side; X{ X printf("\n\n Do you wish to use counter tape numbers for side %d ? (y/n)..", X Side); X fflush(stdout); X return(Confirm()); X} X X X X X X Xvoid XInSongs(Side, CountsWanted, SongP) Xint Side; Xint CountsWanted; XSONG **SongP; X{ X char CountBuf[10]; X int TCount; X SONG *New; X SONG *Curr; X X NLines(SCRLINES-14); X printf(" Now enter the titles of side %d; hit RETURN when all\n", Side); X NLines(1); X printf(" titles of side %d have been entered.\n", Side); X NLines(1); X printf(" When there is an error in a title, or you forgot one, just\n"); X NLines(1); X printf(" continue and later call the EDIT function from the main menu\n"); X NLines(3); X X TCount = 1; X X while(1) { X if(CountsWanted) { X printf(" Tape counter reading of title number %d (max %d characters): ", X TCount, CtLen); X fflush(stdout); X gets(CountBuf); X NullEnd(CountBuf, CtLen); X X if(CountBuf[0] == '\0') /* prev was last song */ X return; X X } X printf(" Name of title %2d (max %d chars): ", TCount, TlLen); X fflush(stdout); X gets(Buf); X NullEnd(Buf, TlLen); X X if(Buf[0] == '\0') /* prev was last song */ X return; X X /* X * We have a title and maybe a counter X * Fill these two in into a new SONG struct X */ X New = NewSong(); X if(CountsWanted) { X New->Count = NewString(CountBuf); X } else { X New->Count = NewString(""); X } X New->Title = NewString(Buf); X X /* X * Now add the song struct at the end of the song list X */ X New->Next = (SONG *)0; X X if(*SongP == (SONG *)0) { /* deal separately with first */ X *SongP = New; X } else { X Curr = *SongP; /* find end of SONG list */ X while(Curr->Next != (SONG *)0) X Curr = Curr->Next; X X Curr->Next = New; X } X TCount++; X } X} @//E*O*F creat.c // chars=`wc -c < creat.c | awk '{ print $1}'` if test $chars != 5134 then echo 'creat.c' is $chars characters, echo should be 5134 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - data.c if test -f data.c then echo data.c exists, putting output in $$data.c OUT=$$data.c else OUT=data.c fi sed 's/^X//' > $OUT <<'@//E*O*F data.c //' X#include "xdefs.h" X XCATITEM *FirstCatIt = (CATITEM *)0; XCATITEM *LastCatIt = (CATITEM *)0; X XCASS CurCass[1]; XCATITEM *CurIt = (CATITEM *)0; X Xint NCatItems = 0; Xchar LineBuf[100]; Xchar Buf[100]; @//E*O*F data.c // chars=`wc -c < data.c | awk '{ print $1}'` if test $chars != 210 then echo 'data.c' is $chars characters, echo should be 210 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - defines.h if test -f defines.h then echo defines.h exists, putting output in $$defines.h OUT=$$defines.h else OUT=defines.h fi sed 's/^X//' > $OUT <<'@//E*O*F defines.h //' X#ifndef DEFINES_H X#define DEFINES_H X X X#define SCRLINES 24 X#define PARAMFILE1 "CASSETTE.DAT" X#define PARAMFILE2 "/usr/local/lib/CASSETTE.DAT" X X X/* X * for select: WHAT do we want to select ? X */ X#define SONGS1 1 X#define SONGS2 2 X#define CAT_ITEMS 3 X X#define ENDMARKER 0 X#define QUIT 99 X X/* X * Main menu X */ X#define LIST_COVERS 1 X#define DEL_COVERS 2 X#define RD_COVER 3 X#define CREAT_COVER 5 X#define EDIT_COVER 6 X#define SHO_COVER 7 X#define FILE_COVER 9 X X/* X * TapeType menu X */ X#define NONE '0' X#define FEO3 '1' X#define CRO2 '2' X#define FECR '3' X#define METAL '4' X X/* X * Noisereduction system menu X */ X#define DOLBY_B '1' X#define DOLBY_C '2' X#define DBX '3' X#define HXPRO '4' X#define NO_NR '9' X X X#define ALL 0x01 X#define TO_DELETE 0x02 X#define TO_PRINT 0x03 X#define TO_FILE 0x04 X X X X#define SELECTED (flag)0x1 X X X X#define CASSMAGIC "#XCASS-COVER-1" X X X X X X#endif DEFINES_H @//E*O*F defines.h // chars=`wc -c < defines.h | awk '{ print $1}'` if test $chars != 884 then echo 'defines.h' is $chars characters, echo should be 884 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - del.c if test -f del.c then echo del.c exists, putting output in $$del.c OUT=$$del.c else OUT=del.c fi sed 's/^X//' > $OUT <<'@//E*O*F del.c //' X#include <stdio.h> X#include "defines.h" X#include "xdefs.h" X X Xextern void DelSelectedCovers(); Xextern void DelCatItem(); X Xvoid XDelCovers() X{ X ListCovers(ALL); X X printf(" Enter the number(s) of the covers to be\n deleted: "); X fflush(stdout); X X DoSelect(CAT_ITEMS, NCatItems); /* ask numbers of covers to delete */ X ListCovers(TO_DELETE); X X printf(" Do you really want to remove these covers ? (y/n) ..."); X fflush(stdout); X X if(!Confirm()) { X UnSelect(CAT_ITEMS); X return; X } X X DelSelectedCovers(); X return; X} X X X X X/*----------------------------------------------*\ X | Delete all covers in the CATITEM list and | X | also delete the files containing the cover | X | information. | X\*----------------------------------------------*/ Xstatic void XDelSelectedCovers() X{ X CATITEM *ItPt; X CATITEM *Save; X X ItPt = FirstCatIt; X while(ItPt != (CATITEM *)0) { X Save = ItPt->Next; X if(ItPt->Status & SELECTED) { X unlink(ItPt->FileName); X DelCatItem(ItPt); X } X ItPt = Save; X } X return; X} X X Xstatic void XDelCatItem(It) XCATITEM *It; X{ X CATITEM *Prev; X CATITEM *Curr; X X /* X * If the current item is in the delete list, CurIt = 0 X */ X if(It == CurIt) X ClearCurr(); X X /* X * First item requires special treatment. X */ X if(It == FirstCatIt) { X FirstCatIt = It->Next; X free(It->FileName); X free(It->Description); X free(It); X /* X * When we delete last from list (in this case only one), X * set LastCatIt as well X */ X if(It == LastCatIt) X LastCatIt = (CATITEM *)0; X X NCatItems--; X return; X } X X /* X * Find 'It' X */ X Curr = FirstCatIt; X while(Curr != It) { X Prev = Curr; X Curr = Curr->Next; X } X X /* X * When this is the last item, make LastCatIt point to Prev X * because Prev will be the last one in the list X */ X if(LastCatIt == It) X LastCatIt = Prev; X X /* X * Curr points to It now. X */ X free(It->FileName); X free(It->Description); X Prev->Next = Curr->Next; /* link previous to next item */ X free(It); X NCatItems--; X return; X} @//E*O*F del.c // chars=`wc -c < del.c | awk '{ print $1}'` if test $chars != 1946 then echo 'del.c' is $chars characters, echo should be 1946 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - edit.c if test -f edit.c then echo edit.c exists, putting output in $$edit.c OUT=$$edit.c else OUT=edit.c fi sed 's/^X//' > $OUT <<'@//E*O*F edit.c //' X#include <stdio.h> X#include "xdefs.h" X#include "defines.h" X Xextern void DelSongs(); Xextern void EdSongs(); Xextern void RmSong(); X X Xvoid XEditCover() X{ X int Choice; X int Done = 0; X X X /* X * when no cover is read in, return X */ X if(CurIt == (CATITEM *)0) { X Attention("First read in the cover you wich to edit"); X return; X } X X while(Done == 0) { X NLines(SCRLINES - 6 - 13); /* 6 is for ShowGlobal() */ X ShowGlobal(CurIt, CurCass); X X printf(" CHOOSE ONE OF THE FOLLOWING OPTIONS:\n"); X NLines(1); X printf(" 1) Change description\n"); X printf(" 2) Change tape type\n"); X printf(" 3) Change noise reduction system\n"); X printf(" 4) Change back code\n"); X printf(" 5) Change back title 1\n"); X printf(" 6) Change back title 2\n"); X printf(" 7) Edit titles of side 1 and 2\n"); X printf(" 8) UNDO all changes\n"); X printf(" 9) Return to main menu\n"); X NLines(1); X X printf(" Enter your choice ..."); fflush(stdout); X gets(Buf); X Choice = atoi(Buf); X X switch(Choice) { X case 1: X InDescription(CurIt); X break; X case 2: X InTapeType(); X break; X case 3: X InNoiseRed(); X break; X case 4: X InBackCode(); X break; X case 5: X InBackTitle(1, &(CurCass->BackTl1)); X break; X case 6: X InBackTitle(2, &(CurCass->BackTl2)); X break; X case 7: X Done = 1; X break; X case 8: X ClearCass(CurCass); X ReadCover(CurIt, CurCass); X break; X case 9: X return; X } X } X X EdSongs(CurCass, 1); X EdSongs(CurCass, 2); X return; X} X X Xstatic void XEdSongs(Cas, Side) XCASS *Cas; Xint Side; X{ X SONG *SongP; X SONG *Save; X SONG **List; X int Choice; X int NSongs; X int Num; X X if(Side == 1) X List = &(Cas->Side1); X else X List = &(Cas->Side2); X X while(1) { X NSongs = CountSongs(*List); X X NLines(SCRLINES - NSongs-1 - 8); X ShowSongs(*List, Side); X NLines(1); X X printf(" CHOOSE ONE OF THE FOLLOWING OPTIONS:\n"); X printf(" 1) Add a title\n"); X printf(" 2) Delete one or more titles\n"); X printf(" 3) Change a title\n"); X printf(" 4) UNDO changes\n"); X printf(" 5) Ready\n"); X printf(" Enter your choice ..."); fflush(stdout); X gets(Buf); X Choice = atoi(Buf); X X switch(Choice) { X case 1: /* ADD TITLE */ X printf(" After which title (0 for begin) do you want to add\n"); X printf(" the new title ? ... "); X fflush(stdout); X gets(Buf); X Num = atoi(Buf); X X switch(Num) { X case 0: X /* X * Put new song at beginning of the list X */ X Save = *List; X *List = NewSong(); X (*List)->Next = Save; X SongP = *List; X break; X case 1: X Save = (*List)->Next; X SongP = NewSong(); X SongP->Next = Save; X Save->Next = SongP; X break; X default: X SongP = FindSong(*List, Num); /* returns pt to prev it */ X if(SongP == (SONG *)0 || SongP->Next == (SONG *)0) { X Attention("Title %d does not exist!", Num); X break; X } X SongP = SongP->Next; X /* X * get new SONG struct and insert into the list X */ X Save = SongP; X SongP = NewSong(); X SongP->Next = Save->Next; X Save->Next = SongP; X } X X NLines(SCRLINES-1); X X /* X * Get new counter X */ X printf("What is the tape counter reading (max %d character) ? .. ", X CtLen); X fflush(stdout); X X gets(Buf); X NullEnd(Buf, CtLen); X SongP->Count = NewString(Buf); X X /* X * Get new title X */ X printf("What is the title (max %d characters) ? .. ", TlLen); X fflush(stdout); X X gets(Buf); X NullEnd(Buf, TlLen); X SongP->Title = NewString(Buf); X break; X X case 2: /* DEL TITLE */ X DelSongs(Side); X break; X X case 3: /* CHANGE TITLE */ X printf("Which title do you want to change ? ..."); fflush(stdout); X gets(Buf); X Num = atoi(Buf); X X if(Num == 0) { X Attention("Title %d does not exist", Num); X break; X } X X if(Num == 1) { X SongP = *List; X } else { X SongP = FindSong(*List, Num); X if(SongP == (SONG *)0 || SongP->Next == (SONG *)0) { X Attention("Title %d does not exist", Num); X break; X } X SongP = SongP->Next; X } X X NLines(SCRLINES-2); X printf("Old title: %s: %s\n", SongP->Count, SongP->Title); X X free(SongP->Count); X SongP->Count = (char *)0; X free(SongP->Title); X SongP->Title = (char *)0; X X /* X * Get new counter X */ X printf("What is the new tape counter reading (max %d characters) ? ", X CtLen); X fflush(stdout); X X gets(Buf); X NullEnd(Buf, CtLen); X SongP->Count = NewString(Buf); X X /* X * Get new title X */ X printf("What is the new title (max %d characters) ? .. ", TlLen); X fflush(stdout); X X gets(Buf); X NullEnd(Buf, TlLen); X SongP->Title = NewString(Buf); X break; X X case 4: X ClearCass(CurCass); X ReadCover(CurIt, CurCass); X break; X X case 5: X return; X } X } X} X X X Xstatic void XDelSongs(Side) Xint Side; X{ X int NSongs; X SONG *SongP; X SONG *Following; X SONG **List; X X printf(" Specify the titles to be deleted: "); X fflush(stdout); X X if(Side == 1) { X List = &(CurCass->Side1); X NSongs = CountSongs(*List); X DoSelect(SONGS1, NSongs); X } else { X List = &(CurCass->Side2); X NSongs = CountSongs(*List); X DoSelect(SONGS2, NSongs); X } X X SongP = *List; X while(SongP != (SONG *)0) { X if(SongP->Status & SELECTED) { X Following = SongP->Next; X RmSong(SongP, List); X SongP = Following; X } else { X SongP = SongP->Next; X } X } X return; X} X X Xstatic void XRmSong(SongP, List) XSONG *SongP; XSONG **List; X{ X SONG *Prev; X SONG *Curr; X X X /* X * Now delete these songs X */ X /* X * First item requires special treatment. X */ X if(SongP == *List) { X *List = (*List)->Next; X X free(SongP->Count); X SongP->Count = (char *)0; X free(SongP->Title); X SongP->Title = (char *)0; X free(SongP); X X SongP = (SONG *)0; X return; X } X X /* X * Find 'SongP' X */ X Curr = *List; X while(Curr != SongP) { X Prev = Curr; X Curr = Curr->Next; X } X X /* X * Curr points to SongP now. X */ X free(Curr->Count); X Curr->Count = (char *)0; X free(Curr->Title); X Curr->Title = (char *)0; X X Prev->Next = Curr->Next; /* link previous to next item */ X free(Curr); X Curr = (SONG *)0; X return; X} @//E*O*F edit.c // chars=`wc -c < edit.c | awk '{ print $1}'` if test $chars != 6036 then echo 'edit.c' is $chars characters, echo should be 6036 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - list.c if test -f list.c then echo list.c exists, putting output in $$list.c OUT=$$list.c else OUT=list.c fi sed 's/^X//' > $OUT <<'@//E*O*F list.c //' X#include <stdio.h> X#include "defines.h" X#include "xdefs.h" X X X X/*----------------------------------*\ X | Show a list of available covers | X\*----------------------------------*/ Xvoid XListCovers(Func) Xint Func; X{ X CATITEM *It; X int NIts; X int NLinesThisPage; X int NItsThisPage; X int NGroupsPerPage; X int Rest; X X X NGroupsPerPage = (SCRLINES-5) / 6; /* including separation line */ X Rest = SCRLINES-5 - NGroupsPerPage*6; X X NLines(3); X switch(Func) { X case ALL: X printf(" LIST OF AVAILABLE COVERS :\n"); X printf("---------------------------\n"); X break; X case TO_DELETE: X printf(" LIST OF COVERS TO BE DELETED :\n"); X printf("-------------------------------\n"); X break; X case TO_PRINT: X printf(" LIST OF COVERS TO BE PRINTED :\n"); X printf("-------------------------------\n"); X /* X * This won't happen, but you may of course add your own code X * to support this one. X * Then, add an entry in main menu, a case in cas.c X * and change output.c to fit your needs. X */ X break; X case TO_FILE: X printf(" LIST OF COVERS TO BE PRINTED TO DISK :\n"); X printf("---------------------------------------\n"); X break; X } X X NIts = 0; X NLinesThisPage = 0; X NItsThisPage = 0; X X for(It = FirstCatIt; It != (CATITEM *)0; It = It->Next) { X if(Func != ALL && !(It->Status & SELECTED)) X continue; X X printf(" %3d) %s\n", NIts+1, It->Description); X NIts++; X NLinesThisPage++; X NItsThisPage++; X X if((NIts % 5) == 0) { X NLines(1); X NLinesThisPage++; X } X X if(NItsThisPage >= NGroupsPerPage*5) { X /* X * new page X */ X NLines(Rest+1); X RetCont(); X NLines(4); X NLinesThisPage = 0; X NItsThisPage = 0; X } X } X X NLines(SCRLINES-5 - NLinesThisPage-1); X return; X} @//E*O*F list.c // chars=`wc -c < list.c | awk '{ print $1}'` if test $chars != 1709 then echo 'list.c' is $chars characters, echo should be 1709 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - menu.c if test -f menu.c then echo menu.c exists, putting output in $$menu.c OUT=$$menu.c else OUT=menu.c fi sed 's/^X//' > $OUT <<'@//E*O*F menu.c //' X#include <stdio.h> X#include "defines.h" X#include "xdefs.h" X X Xextern void PrintMenu(); X X X X/*---------------------------------------------------------------------------*/ X XMLINE MainItems[] = { X "Show a list of cassettecovers", LIST_COVERS, X "Delete cover(s)", DEL_COVERS, X "Create a new cover", CREAT_COVER, X "Read in an existing cover", RD_COVER, X "Edit a read-in cover", EDIT_COVER, X "Show read-in cover on the screen", SHO_COVER, X "Print cover(s) to Postscript-file", FILE_COVER, X "Quit", QUIT, X "", ENDMARKER X}; X XMENUITEM MainMenu = { X " MAIN MENU - CHOOSE ONE OF THE FOLLOWING OPTIONS:", 0, X MainItems X}; X X X/*---------------------------------------------------------------------------*/ X XMLINE TapeItems[] = { X "I Ferro (Normal)", FEO3, X "II Chromedioxide (Chromium)", CRO2, X "III Ferrochrome", FECR, X "IV Metal", METAL, X "", ENDMARKER X}; X XMENUITEM TapeMenu = { X " TAPE TYPE - CHOOSE A TAPE TYPE", 0, X TapeItems X}; X X X/*---------------------------------------------------------------------------*/ X XMLINE NoiseItems[] = { X "Dolby B", DOLBY_B, X "Dolby C", DOLBY_C, X "DBX", DBX, X "HX-PRO", HXPRO, X "No noise reduction", NO_NR, X "", ENDMARKER X}; X XMENUITEM NoiseMenu = { X " NOISE SUPPRESSION - WHICH SYSTEM ?", 0, X NoiseItems X}; X X/*---------------------------------------------------------------------------*/ X X X X X/*--------------*\ X | Print a menu | X\*--------------*/ Xstatic void XPrintMenu(Menu) XMENUITEM *Menu; X{ X MLINE *EntryP; X int MCount; X X NLines(SCRLINES - Menu->NEntries*2 - 2); X printf("%s\n\n", Menu->MenuTitle); X X /* X * Print the items of the menu X */ X MCount = 1; X EntryP = Menu->Entry; X while(EntryP->Func != ENDMARKER) { X printf("\t%2d) %s\n\n", MCount, EntryP->Text); X EntryP++; X MCount++; X } X printf(" Enter your choice: "); fflush(stdout); X return; X} X X X X Xvoid XInitMenu(Menu) XMENUITEM *Menu; X{ X MLINE *EntryP; X int MCount; X X /* X * Count the number of menu items. X */ X MCount = 0; X EntryP = Menu->Entry; X while(EntryP++->Func != ENDMARKER) X MCount++; X X Menu->NEntries = MCount; X return; X} X X XChooseMenu(Menu) XMENUITEM *Menu; X{ X int Choice; X char Buf[100]; X X do { X PrintMenu(Menu); X gets(Buf); X Choice = atoi(Buf); X } while(Choice < 1 || Choice > Menu->NEntries); X return(Menu->Entry[Choice-1].Func); X} @//E*O*F menu.c // chars=`wc -c < menu.c | awk '{ print $1}'` if test $chars != 2323 then echo 'menu.c' is $chars characters, echo should be 2323 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - mktmp.c if test -f mktmp.c then echo mktmp.c exists, putting output in $$mktmp.c OUT=$$mktmp.c else OUT=mktmp.c fi sed 's/^X//' > $OUT <<'@//E*O*F mktmp.c //' X#include <stdio.h> X#include "xdefs.h" X X/*----------------------------------------------*\ X | Write a filename into buffer FName. A file- | X | name is created from a template by incremen- | X | ting the last characters of the filename | X | until an unused name is obtained. | X\*----------------------------------------------*/ X Xstatic char *Template = "COVERAAA.COV"; X/* X * FIXED denotes the number of chars that do not change X * NVARS is number of characters that vary. X */ X#define FIXED 5 X#define NVARS 3 X X Xextern int FNUsed(); Xextern int FNPresent(); Xextern void FNIncr(); X Xvoid XMkTmp(FName) Xchar *FName; X{ X StringCopy(Template, FName); X while(FNUsed(FName)) { X FNIncr(FName); X } X return; X} X X/***************************************************************************/ X/* ONLY STATIC FUNCTIONS UNDER THIS LINE */ X/***************************************************************************/ X X X X/* X * Check if an item with filename Name is present. X * Do this by comparing with all Itemfilenames. X */ Xstatic XFNUsed(Name) Xchar *Name; X{ X CATITEM *ItPt; X FILE *Fp; X int Found; X X ItPt = FirstCatIt; X Found = 0; X while(ItPt != (CATITEM *)0 && Found == 0) { X if(!StringDiff(Name, ItPt->FileName)) { X Found = 1; X break; X } X ItPt = ItPt->Next; X } X if(Found == 0) { X /* X * Filename is not present in the list, but X * although the chance is very small there may be X * a file with this name by coincidence. X * So .. check if it can be opened. X */ X if((Fp = fopen(Name, "r")) != NULL) { X fclose(Fp); X Found = 1; X } X } X return(Found); X} X X Xvoid XFNIncr(Name) Xchar *Name; X{ X char *Cp; X int NChars; X X Cp = Name + FIXED; X X for(NChars = 0; NChars < NVARS; NChars++) { X if(*Cp == 'Z') { X *Cp = 'A'; X Cp++; X continue; X } else { X ++*Cp; X return; X } X } X Panic("Too many cassettecovers !!! Delete some!"); X return; X} @//E*O*F mktmp.c // chars=`wc -c < mktmp.c | awk '{ print $1}'` if test $chars != 1858 then echo 'mktmp.c' is $chars characters, echo should be 1858 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - new_it.c if test -f new_it.c then echo new_it.c exists, putting output in $$new_it.c OUT=$$new_it.c else OUT=new_it.c fi sed 's/^X//' > $OUT <<'@//E*O*F new_it.c //' X#include <stdio.h> X#include "xdefs.h" X Xextern void NoMem(); X X/*----------------------------------------------*\ X | Allocate space for string s and copy s to | X | this space. Return pointer to new space. | X\*----------------------------------------------*/ Xchar * XNewString(s) Xchar *s; X{ X char *NewP; X char *calloc(); X X if((NewP = (char *)calloc(sizeof(char), StringLen(s)+1)) == (char *)0) X NoMem("NewString"); X X StringCopy(s, NewP); X return(NewP); X} X X X/*--------------------------------------*\ X | Allocate space for CATITEM struct | X\*--------------------------------------*/ XCATITEM * XNewCatItem() X{ X CATITEM *NewP; X char *malloc(); X X if((NewP = (CATITEM *)(malloc(sizeof(CATITEM)))) == (CATITEM *)0) X NoMem("NewCatItem"); X X return(NewP); X} X X X X/*------------------------------*\ X | Allocate for new SONG struct | X\*------------------------------*/ XSONG * XNewSong() X{ X SONG *NewP; X char *malloc(); X X if((NewP = (SONG *)malloc(sizeof(SONG))) == (SONG *)0) X NoMem("NewSong"); X X NewP->Status = 0; X return(NewP); X} X X X X X Xstatic void XNoMem(Func) Xchar *Func; X{ X Panic("Out of memory in funtion %s", Func); X} @//E*O*F new_it.c // chars=`wc -c < new_it.c | awk '{ print $1}'` if test $chars != 1110 then echo 'new_it.c' is $chars characters, echo should be 1110 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - output.c if test -f output.c then echo output.c exists, putting output in $$output.c OUT=$$output.c else OUT=output.c fi sed 's/^X//' > $OUT <<'@//E*O*F output.c //' X#include <stdio.h> X#include "xdefs.h" X#include "defines.h" X Xstatic CASS OutCass[4]; Xstatic FILE *CovFp; X X Xextern void CovOutput(); X X X Xvoid XOutCovers(Func) Xint Func; X{ X int CovCount; X CATITEM *It; X X X ListCovers(ALL); X X printf(" Enter the numbers of the cover to be\n printed (to disk): "); X fflush(stdout); X X DoSelect(CAT_ITEMS, NCatItems); /* ask numbers of covers to delete */ X ListCovers(Func); X X printf("\n Do you want to print these covers to postscript file ? (y/n) "); X fflush(stdout); X X if(!Confirm()) { X UnSelect(CAT_ITEMS); X return; X } X X CovCount = 0; X It = FirstCatIt; X /* X * read in the covers in groups of four and output them. X */ X if((CovFp = fopen("COVERS.PS", "w")) == NULL) X Panic("Can't create output file"); X X while(It != (CATITEM *)0) { X if((It->Status & SELECTED) == 0) { X It = It->Next; X continue; X } X ReadCover(It, &(OutCass[CovCount])); X CovCount++; X if((CovCount % 4) == 0) { X CovOutput(CovCount); X CovCount = 0; X } X It = It->Next; X } X CovOutput(CovCount); X fclose(CovFp); X} X X Xstatic void XCovOutput(NCovs) Xint NCovs; X{ X int CovCount; X CASS *OutC; X SONG *SongP; X int SongY; X X if(NCovs == 0) return; X X fprintf(CovFp, "%%!\n"); X X /* X * tenths of millimeters: X */ X fprintf(CovFp, "/tmm { 0.283464 mul } def\n"); X fprintf(CovFp, "90 rotate\n"); X fprintf(CovFp, "150 tmm -2100 tmm translate\n"); X X X X X for(CovCount = 0; CovCount < NCovs; CovCount++) { X switch(CovCount) { X case 0: X OutC = OutCass; X fprintf(CovFp, "80 tmm 70 tmm translate\n"); X break; X case 1: X OutC = &(OutCass[1]); X fprintf(CovFp, "1070 tmm 0 tmm translate\n"); X break; X case 2: X OutC = &(OutCass[2]); X fprintf(CovFp, "0 tmm 970 tmm translate\n"); X break; X case 3: X OutC = &(OutCass[3]); X fprintf(CovFp, "-1070 tmm 0 tmm translate\n"); X break; X default: X Panic("Error in output routine; CovCount = %d!\n", CovCount); X } X /* X * Draw lines first X */ X fprintf(CovFp, "newpath\n"); X X fprintf(CovFp, "0.1 setlinewidth\n"); X X /* X * upper two folding lines X */ X fprintf(CovFp, "1 tmm 295 tmm moveto\n"); X fprintf(CovFp, "3 tmm 295 tmm lineto\n"); X fprintf(CovFp, "1011 tmm 295 tmm moveto\n"); X fprintf(CovFp, "1013 tmm 295 tmm lineto\n"); X X /* X * lower two folding lines X */ X fprintf(CovFp, "1 tmm 160 tmm moveto\n"); X fprintf(CovFp, "3 tmm 160 tmm lineto\n"); X fprintf(CovFp, "1011 tmm 160 tmm moveto\n"); X fprintf(CovFp, "1013 tmm 160 tmm lineto\n"); X X /* X * Top cutting line X */ X fprintf(CovFp, "1 tmm 960 tmm moveto\n"); X fprintf(CovFp, "1015 tmm 960 tmm lineto\n"); X X /* X * Bottom cutting line X */ X fprintf(CovFp, "1 tmm 1 tmm moveto\n"); X fprintf(CovFp, "1015 tmm 1 tmm lineto\n"); X X /* X * Left cutting line X */ X fprintf(CovFp, "1 tmm 1 tmm moveto\n"); X fprintf(CovFp, "1 tmm 960 tmm lineto\n"); X X /* X * Right cutting line X */ X fprintf(CovFp, "1015 tmm 1 tmm moveto\n"); X fprintf(CovFp, "1015 tmm 960 tmm lineto\n"); X X X X /* X * Horizontal line on the front X * Vertical line in the middle X */ X fprintf(CovFp, "0.5 setlinewidth\n"); X fprintf(CovFp, "%d tmm %d tmm moveto\n", FTlSepX1, FTlSepY); X fprintf(CovFp, "%d tmm %d tmm lineto\n", FTlSepX2, FTlSepY); X X fprintf(CovFp, "%d tmm %d tmm moveto\n", FVSepX, FVSepY1); X fprintf(CovFp, "%d tmm %d tmm lineto\n", FVSepX, FVSepY2); X X fprintf(CovFp, "stroke\n"); X X X X /* X * 'Designed by' ... message...... X */ X fprintf(CovFp, "/%s findfont\n", BTFont); /* set font */ X fprintf(CovFp, "3 scalefont setfont\n"); /* and size */ X fprintf(CovFp, "880 tmm 20 tmm moveto\n"); X fprintf(CovFp, "(Design: R.M. Bruijne) show\n"); X X /* X * Do Backcode X */ X fprintf(CovFp, "/%s findfont\n", CodeFont); /* set font */ X fprintf(CovFp, "%d scalefont setfont\n", CodeFSize); /* and size */ X X if(*(OutC->BackCode) != '\0') { X fprintf(CovFp, "%d tmm %d tmm moveto\n", CodeXPos, CodeYPos); X fprintf(CovFp, "(%s) show\n", OutC->BackCode); X } X X /* X * Do Tapetype X */ X fprintf(CovFp, "/%s findfont\n", TsNrFont); /* set font */ X fprintf(CovFp, "%d scalefont setfont\n", TsNrFSize); /* and size */ X fprintf(CovFp, "%d tmm %d tmm moveto\n", TsXPos, TsYPos); X X switch(OutC->TapeType) { X case FEO3: X fprintf(CovFp, "(I, FERRO) show\n"); /* tapetype */ X break; X case CRO2: X fprintf(CovFp, "(II, CHROME) show\n"); /* tapetype */ X break; X case FECR: X fprintf(CovFp, "(III, FERROCHROME) show\n"); /* tapetype */ X break; X case METAL: X fprintf(CovFp, "(IV, METAL) show\n"); /* tapetype */ X break; X } X X /* X * Do Noisereduction X */ X fprintf(CovFp, "%d tmm %d tmm moveto\n", NrXPos, NrYPos); X switch(OutC->NoiseReduction) { X case DOLBY_B: X fprintf(CovFp, "(DOLBY B) show\n"); /* noisesys */ X break; X case DOLBY_C: X fprintf(CovFp, "(DOLBY C) show\n"); /* noisesys */ X break; X case DBX: X fprintf(CovFp, "(DBX) show\n"); /* noisesys */ X break; X case HXPRO: X fprintf(CovFp, "(HX-PRO) show\n"); /* noisesys */ X break; X case NO_NR: X fprintf(CovFp, "(NO NR.) show\n"); /* noisesys */ X break; X } X X X /* X * Do Backtitles X */ X fprintf(CovFp, "/%s findfont\n", BTFont); /* set font */ X fprintf(CovFp, "%d scalefont setfont\n", BTFSize); /* and size */ X X if(*(OutC->BackTl1) != '\0') { X fprintf(CovFp, "%d tmm %d tmm moveto\n", BT1XPos, BT1YPos); X fprintf(CovFp, "(%s) show\n", OutC->BackTl1); X } X X if(*(OutC->BackTl2) != '\0') { X fprintf(CovFp, "%d tmm %d tmm moveto\n", BT2XPos, BT2YPos); X fprintf(CovFp, "(%s) show\n", OutC->BackTl2); X } X X X /* X * Do Side A and side B markers on front of cover X */ X fprintf(CovFp, "/%s findfont\n", FrABFont); /* set font */ X fprintf(CovFp, "%d scalefont setfont\n", FrABFSize); /* and size */ X X fprintf(CovFp, "%d tmm %d tmm moveto\n", FrAXPos, FrAYPos); X fprintf(CovFp, "(A) show\n"); X X fprintf(CovFp, "%d tmm %d tmm moveto\n", FrBXPos, FrBYPos); X fprintf(CovFp, "(B) show\n"); X X /* X * Do backtitles on front of cover X */ X fprintf(CovFp, "/%s findfont\n", FrTlFont); /* set font */ X fprintf(CovFp, "%d scalefont setfont\n", FrTlFSize); /* and size */ X X if(*(OutC->BackTl1) != '\0') { X fprintf(CovFp, "%d tmm %d tmm moveto\n", FrTl1XPos, FrTl1YPos); X fprintf(CovFp, "(%s) show\n", OutC->BackTl1); X } X X if(*(OutC->BackTl2) != '\0') { X fprintf(CovFp, "%d tmm %d tmm moveto\n", FrTl2XPos, FrTl2YPos); X fprintf(CovFp, "(%s) show\n", OutC->BackTl2); X } X X /* X * Now titles of songs X */ X fprintf(CovFp, "/%s findfont\n", TlFont); /* set font */ X fprintf(CovFp, "%d scalefont setfont\n", TlFSize); /* and size */ X X /* X * SIDE 1 X */ X SongP = OutC->Side1; X SongY = Tl1YPos; X while(SongP != (SONG *)0) { X if(*(SongP->Count) != '\0') { X fprintf(CovFp, "%d tmm %d tmm moveto\n", Tl1XPos, SongY); X fprintf(CovFp, "(%s) show\n", SongP->Count); X } X if(*(SongP->Title) != '\0') { X fprintf(CovFp, "%d tmm %d tmm moveto\n", X Tl1XPos+CtTlXDist, SongY); X fprintf(CovFp, "(%s) show\n", SongP->Title); X } X SongY -= TlLDist; X SongP = SongP->Next; X } X X /* X * SIDE 2 X */ X SongP = OutC->Side2; X SongY = Tl2YPos; X while(SongP != (SONG *)0) { X if(*(SongP->Count) != '\0') { X fprintf(CovFp, "%d tmm %d tmm moveto\n", Tl2XPos, SongY); X fprintf(CovFp, "(%s) show\n", SongP->Count); X } X if(*(SongP->Title) != '\0') { X fprintf(CovFp, "%d tmm %d tmm moveto\n", X Tl2XPos+CtTlXDist, SongY); X fprintf(CovFp, "(%s) show\n", SongP->Title); X } X SongY -= TlLDist; X SongP = SongP->Next; X } X ClearCass(OutC); X X } X fprintf(CovFp, "showpage\n"); X return; X} @//E*O*F output.c // chars=`wc -c < output.c | awk '{ print $1}'` if test $chars != 7508 then echo 'output.c' is $chars characters, echo should be 7508 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi echo x - params.c if test -f params.c then echo params.c exists, putting output in $$params.c OUT=$$params.c else OUT=params.c fi sed 's/^X//' > $OUT <<'@//E*O*F params.c //' X/*--------------------------------------*\ X | file containing the definitions of | X | all parameters present in the data- | X | file. These parameters define the | X | format of the cover. | X\*--------------------------------------*/ X Xint CodeXPos; /* Backcode parameter 1 */ Xint CodeYPos; /* Backcode parameter 1 */ Xint CodeLen; /* Backcode parameter 2 */ Xchar *CodeFont; /* Backcode parameter 3 */ Xint CodeFSize; /* Backcode parameter 4 */ X Xint TsXPos; /* Tapetype xpos, parameter 5 */ Xint TsYPos; /* Tapetype ypos, parameter 5 */ Xint NrXPos; /* NoiseRed xpos, parameter 6 */ Xint NrYPos; /* NoiseRed ypos, parameter 6 */ Xchar *TsNrFont; /* tapetype&NoiseRed font, p 7 */ Xint TsNrFSize; /* ts & NoiseRed fontsize, p 8 */ X Xint BT1XPos; /* Backtitle 1 xpos, param 9 */ Xint BT1YPos; /* Backtitle 1 ypos, param 9 */ Xint BT2XPos; /* Backtitle 2 xpos, param 10 */ Xint BT2YPos; /* Backtitle 2 ypos, param 10 */ Xint BTLen; /* Backtitle Length, param 11 */ Xchar *BTFont; /* Backtitle font, param 12 */ Xint BTFSize; /* Backtitel fontsize, param 13 */ X Xint FrAXPos; /* Front A, xpos, param 14 */ Xint FrAYPos; /* Front A, ypos, param 14 */ Xint FrBXPos; /* Front B, xpos, param 15 */ Xint FrBYPos; /* Front B, ypos, param 15 */ Xchar *FrABFont; /* Front A&B, font, param 16 */ Xint FrABFSize; /* Front A&B, fontsize, par 17 */ X Xint FrTl1XPos; /* Front title 1 xpos, par 18 */ Xint FrTl1YPos; /* Front title 1 ypos, par 18 */ Xint FrTl2XPos; /* Front title 2 xpos, par 19 */ Xint FrTl2YPos; /* Front title 2 ypos, par 19 */ Xchar *FrTlFont; /* Fronttitle font, param 20 */ Xint FrTlFSize; /* Fronttitle fontsiz, param 21 */ X Xint Tl1XPos; /* Title 1 xpos, param 22 */ Xint Tl1YPos; /* Title 1 ypos, param 22 */ Xint Tl2XPos; /* Title 2 xpos, param 23 */ Xint Tl2YPos; /* Title 2 ypos, param 23 */ Xint TlLen; /* length of title, par 24 */ Xint TlLDist; /* line spacing titles, par 25 */ Xchar *TlFont; /* Title font, parameter 26 */ Xint TlFSize; /* and fontsize, parameter 27 */ X Xint CtTlXDist; /* Dist between tl and ct,par28 */ Xint CtLen; /* countlength, parameter 29 */ X Xint FTlSepX1; /* horizontal line front xfrom */ Xint FTlSepX2; /* horizontal line front xto */ Xint FTlSepY; /* horizontal line front y */ X Xint FVSepX; /* front separation line x */ Xint FVSepY1; /* front separation line yfrom */ Xint FVSepY2; /* front separation line yto */ X X X X/* X * That's it! X */ @//E*O*F params.c // chars=`wc -c < params.c | awk '{ print $1}'` if test $chars != 2465 then echo 'params.c' is $chars characters, echo should be 2465 characters\! else chmod u=rw-,g=r--,o=r-- $OUT fi # End of shell archive exit 0 --------------cut here------------ -- --------------------------------------------------------------------------- Remco Bruijne USENET: remco@tnoibbc.ibbc.tno.nl PHONE: +31 15 606437 ---------------------------------------------------------------------------