• Help needed debugging TmpCreat128!

    From Harry Potter@3:770/3 to All on Mon Dec 23 11:32:37 2019
    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)