Subj : Help needed debugging TmpCreat128!
To   : All
From : Harry Potter
Date : Mon Dec 23 2019 11:32 am

Hi! I have yet to find the bug with my Template Creator 128 program. The Add
Template module seems to work up to the call to Fields. The debug code I placed
just after the call seems to run. But then, it does not display the New Format
prompt--even
though it is supposed to, as it is a new template disk--and displays an Insert
Templates Disk message. I insert it and get the C128 Monitor. The PC is at
F4433, where there is no code there. Following is the erroneous code:
-------------------------
void tmp_add_main (void)
{
       //unsigned char i;
       //unsigned char /*i,*/ j;
       //char c;
       //struct dbentry* cur;
       //bzero (&tmp_db, sizeof(tmp_db));
       //bzero (&input, sizeof(input));
       //cleardb ();
//bordercolor (0);cgetc ();
       //bzero (&input, sizeof(input));
//bordercolor (1);cgetc ();
       instmpdiskp();

       tmpdb_open ();
//bgcolor (2);
       /*curtemplate.name[0]=*///input.fmt[0]=0;
       //fName.data.text=curtemplate.name;//input.name;
       fTmp.data.text=input.out;//input.tmp;
       //fType.data.sel.sel=(cur->filetype=0);
       fType.data.sel.num=4;
       fType.data.sel.values=filetypes;
       //input.type=0;
       fType.data.sel.sel=&input.type;
       //fFmt.data.text=curtemplate.fmt;//input.fmt;
       //FillFmt();
       i=fFmt.data.sel.num=input.fmtnum=input.type=0;
//bgcolor (3);
       for (; i<8; ++i) {
               //if (tmp_db.usedfmts&(1<<i)) {
               if ((tmp_db.usedfmts>>i)&1) {
                       //usedfmts[j]=tmp_db.fmts[i];
                       //*getfmt(fFmt.data.sel.num)=getfmt (usedfmtsnums[fFmt.data.sel.num]=i);
                       usedfmts[fFmt.data.sel.num]=tmp_db.fmts[
(usedfmtsnums[fFmt.data.sel.num]=i)];
                       //usedfmtsnums[j]=i;
                       ++fFmt.data.sel.num;
               }
       }
//bgcolor (4);
       if (fFmt.data.sel.num<8) {
               //*getfmt(fFmt.data.sel.num)=snone;
               usedfmts[fFmt.data.sel.num]=snone;
               ++fFmt.data.sel.num;
       }
       //numfmtsavail=j;
       //input.fmtnum=0;
       fFmt.data.sel.sel=&input.fmtnum;
       //fFmt.data.sel.num=numfmtsavail;
       fFmt.data.sel.values=usedfmts;
       //cclearxy(i=0,23,39); cclearxy(0,24,39);
       i=j=input.tmp[0]=input.out[0]=0;
       //clearline (23); clearline (24);

       //gotoxy (0,24); prints ("Insert template disk...");
       //cgetc();
       //promptdisk (instmpdisk);
       //for (; i<32 && (tmp_db.usedentries[i>>3]&(1<<(i&7))); ++i);
       //for (; i<32 && *(unsigned long*)(&tmp_db.usedentries)&(1<<i); ++i);
//bgcolor (1);

       for (; j<32 && (*(unsigned long*)(&tmp_db.usedentries)>>j)&1; ++j);
       if (j==32) {
               //gotoxy (0, 23);  printscr ("Template disk full!\n"
               //                        "Press any key to continue...");
               ///cgetc(); return;
               promptdisk ("Template disk full!"); return;
       }
       //cur=getdbent(j);//&tmp_db.entry[i];
       //fName.data.text=(cur=getent(j))->name;
       //fName.data.text=(cur=getdbent(j))->name;
       //cur=getdbent(j);
       //cur=getent(j);
       //input.type=0;
       //fFmt.data.text=&(cur=getent(j))->filetype;
       fTmp.data.text=input.tmp;
       fName.data.text=input.out;//cur->name;
//bgcolor (1);

       if (dialog(&fInTemp)) return;

bgcolor (3); cgetc ();

       cur=getent(j);
       //strcpy (cur->name, input.tmp);
       //cur->filetype=input.type;
//bgcolor (3); cgetc ();
       if (!strcmp(usedfmts[input.fmtnum], snone))
       //if (usedfmts[input.fmtnum]==snone)
       {
//bgcolor (4); cgetc ();
               for (i=0; (tmp_db.usedfmts>>i)&1; ++i);
//bgcolor (5); cgetc ();
               gotoy (17);
//bgcolor (6); cgetc ();
               printf ("\nNew format name");
               GetInput (getfmt(i), 17);
               tmp_db.usedfmts|=1<<i;
       } else {
               //for (; strcmp(getfmt(i), getfmt(input.fmtnum)); ++i);
               i=usedfmts[input.fmtnum];
       } cur->fmt=i;
       //gotoxy (0,24); prints ("Insert input disk...   ");
       //cgetc();
       promptdisk ("Insert input disk...");
       //strcpy (curtemplate.name, input.tmp);
       //strcpy (curtemplate.fmt, input.fmt);
       //sprintf (fi,"0:%s,%c,r", input.name, filetypes[input.type][0]);
       //strcpy (curtemplate.name, input.tmp);
       //strcpy (curtemplate.fmt, input.fmt);
       //j=filetypes[input.type][0];
       //sprintf (fi,"%s,%c", curtemplate.name, filetypes[input.type][0]);
       //sprintf (fi, "%s,%c", curtemplate.name, j=filetypes[input.type][0]);
       //sprintf (fi, &qfilename[2], curtemplate.name,
j=filetypes[cur->filetype=input.type][0]);
//cputsxy (0,1, fi); cgetc();
       //cbm_open (filenum, 8, CBM_READ, fi);
       //openfile (CBM_READ);
       //openfile (curtemplate.name, CBM_READ);
       //openfile (cur->name, CBM_READ);
//promptdisk (input.tmp);
bgcolor (4); cgetc();//
       openfile (input.out, CBM_READ);
bgcolor (2);
#ifdef __C128__
       cur->size=/*curtemplate.size=*/bank1_cbm_read(filenum, 0x400, 0xF000);
#else
       cur->size=/*curtemplate.size=*/h_cbm_read(filenum, templatedata, 0x9800);
#endif
       //cur->size=h_cbm_read(filenum, curtemplate.data, 32767);
       //curtemplate.size=cbm_read(filenum, curtemplate.data, 32767);
bgcolor (3);
       cbm_close (filenum);
//chn15();
//clrscr(); printf ("size = %d\n", curtemplate.size); cgetc();
       //if ((signed) curtemplate.size<0) {
       if ((signed) cur->size==-1) {
               //gotobottom (); puts ("Error loading template!");
               //cgetc(); return;
               promptdisk ("Error loading template!");
               return;
       }
       //if (curtemplate.size==32767) {
       //if ((int)curtemplate.size<0) {
       if (!cbm_k_readst()&0x40) {
               //gotobottom (); puts ("Template too large!");
               //cgetc(); return;
               promptdisk ("Template too large!");
               return;
       }

       //strcpy (tmp_db.entry[i].name, curtemplate.name);
       strcpy (cur->name, input.tmp);
       //strcpy (cur->name, input.tmp);
       //cur->size=curtemplate.size;
       cur->filetype=input.type;
       //tmp_db.usedentries[i>>3]|=(1<<(i&7));
       __asm__ ("\tlda\t_j\n"
                //"\tpha\n"
                "\tand\t#7\n"
                "\ttay\n"
                //"\tpla\n"
                "\tlda\t_j\n"
                "\tlsr\n"
                "\tlsr\n"
                "\tlsr\n"
                "\ttax\n"
                //"\tlda\t_tmp_db+17,x\n"
                "\tlda\t#1\n"
                "\tcpy\t#0\n"
                "\tbeq\t@zz12\n"
                "@zz11:\n"
                "\tasl\n"
                "\tdey\n"
                "\tbne\t@zz11\n"
                "@zz12:\n"
                "\tora\t_tmp_db+18,x\n"
                "\tsta\t_tmp_db+18,x\n"
                );
       //*(unsigned long*)(&tmp_db.usedentries)|=(1<<i);

       //gotoxy (0,24); prints ("Insert template disk...");
       //cgetc();
       //promptdisk (instmpdisk);
       instmpdiskp ();
       //sprintf (fi, "@:%s,%c", input.tmp, j);
       //sprintf (fi, qfilename, input.tmp, j);
//cputsxy (0,1, fi); cgetc();
       //cbm_open (filenum, 8, CBM_WRITE, fi);
       //openfile (CBM_WRITE);
       tmpdb_save();

       openfile (cur->name, CBM_WRITE);
//printf ("ST: %d\n", (unsigned) cbm_k_readst()); cgetc();
       //h_cbm_write (filenum, curtemplate.data, cur->size=curtemplate.size);
#ifdef __C128__
       bank1_cbm_write (filenum, 0x400, cur->size);
#else
       h_cbm_write (filenum, templatedata, cur->size);
#endif
       //cbm_write (filenum, curtemplate.data, curtemplate.size);
//chn15();
       cbm_close (filenum);
}
-------------------------

--- SoupGate-Win32 v1.05
* Origin: Agency HUB, Dunedin - New Zealand | Fido<>Usenet Gateway (3:770/3)