home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / ST_USER / 1990 / USERJA90.MSA / LISTINGS_FORMAT.C < prev    next >
C/C++ Source or Header  |  1989-10-26  |  4KB  |  147 lines

  1. /*   Multi - Formatter   */
  2. /*    By R.A.Waddilove   */
  3. /* Last altered 18/08/89 */
  4.  
  5. #include <obdefs.h>
  6. #include <osbind.h>
  7.  
  8. #define SHOW 257
  9. #define HIDE 256
  10. #define POINTER 0
  11. #define BEE 2
  12.  
  13. /* resource set indicies for FORMAT */
  14. #define DIALOGUE 0 /* form/dialog */
  15. #define DRIVEA 6   /* BUTTON in tree DIALOGUE */
  16. #define DRIVEB 7   /* BUTTON in tree DIALOGUE */
  17. #define NINE 11     /* BUTTON in tree DIALOGUE */
  18. #define TEN 12      /* BUTTON in tree DIALOGUE */
  19. #define SINGLE 15   /* BUTTON in tree DIALOGUE */
  20. #define DOUBLE 16   /* BUTTON in tree DIALOGUE */
  21. #define FORMAT 17   /* BUTTON in tree DIALOGUE */
  22. #define QUIT 18     /* BUTTON in tree DIALOGUE */
  23. #define ZERO 21     /* BUTTON in tree DIALOGUE */
  24. #define TWO 22      /* BUTTON in tree DIALOGUE */
  25. #define ONE 23      /* BUTTON in tree DIALOGUE */
  26. #define BOX 24      /* BOX in tree DIALOGUE */
  27.  
  28. int contrl[12],
  29.      intin[128],
  30.      intout[128],
  31.      ptsin[128],
  32.      ptsout[128],
  33.      work_in[12],
  34.      work_out[57];
  35.  
  36. int handle,       /* vdi handle */
  37.     hchar,         /* character height */
  38.     wchar,         /* character width */
  39.     dx,dy,dw,dh,/* dialog coords */
  40.     scr_mode;     /* screen mode */
  41.  
  42. char buffer[11000];
  43.  
  44. OBJECT*dialog;
  45.  
  46. gem_on()
  47. {
  48.     int i;
  49.     appl_init();
  50.     handle = graf_handle(&wchar,&hchar,&i,&i);   /* i is dummy variable */
  51.     for (i = 0; i < 10; work_in[i++] = 1);
  52.     work_in[10] = 2;
  53.     return (v_opnvwk(work_in,&handle,work_out));
  54. }
  55.  
  56. gem_off()
  57. {
  58.     rsrc_free();
  59.     v_clsvwk(handle);
  60.     appl_exit();
  61. }
  62.  
  63. main()
  64. {
  65.     if (gem_on() == 0)
  66.         gem_off();     /* exit if low res */
  67.     if (!rsrc_load("format.rsc"))
  68.         gem_off();     /* exit if can't find resource */
  69.     rsrc_gaddr(0,DIALOGUE,&dialog);
  70.     form_center(dialog,&dx,&dy,&dw,&dh);     /* centre dialog */
  71.     dx = 8*(dx/8); dialog->ob_x = dx;
  72.     dy = 8*(dy/8); dialog->ob_y = dy;
  73.     do_dialog();
  74.     gem_off();
  75. }
  76.  
  77. do_dialog()
  78. {
  79.     graf_mouse(POINTER,0);
  80.     graf_mouse(HIDE,0);
  81.     form_dial(0,0,0,0,0,dx,dy,dw,dh);    /* save screen */
  82.     objc_draw(dialog,0,32767,dx,dy,dw,dh);  /* draw dialog */
  83.     graf_mouse(SHOW,0);
  84.     while (form_do(dialog,0) != QUIT) {
  85.         format();
  86.         dialog[FORMAT].ob_state ^= SELECTED;
  87.         graf_mouse(HIDE,0);
  88.         objc_draw(dialog,FORMAT,0,dx,dy,dw,dh);
  89.         objc_draw(dialog,BOX,0,dx,dy,dw,dh);
  90.         graf_mouse(SHOW,0);
  91.     }
  92.     dialog[QUIT].ob_state ^= SELECTED;
  93.     graf_mouse(HIDE,0);
  94.     form_dial(3,0,0,0,0,dx,dy,dw,dh);    /* restore screen */
  95.     graf_mouse(SHOW,0);
  96. }
  97.  
  98. format()
  99. {
  100.     register int i,t,s,skew;
  101.     int drive,tracks,sectors,sides,box[4];
  102.     box[0] = dx+wchar*10;
  103.     box[1] = dy+hchar*17;
  104.     box[2] = box[0]+wchar;
  105.     box[3] = box[1]+hchar-1;
  106.     vsf_interior(handle,2); /* pattern fill */
  107.     vsf_style(handle,4);
  108.     vsf_color(handle,2);
  109.     drive = 0;
  110.     if (dialog[DRIVEB].ob_state & SELECTED) drive = 1;
  111.     tracks = 80;
  112.     if (dialog[TWO].ob_state & SELECTED) tracks = 82;
  113.     if (dialog[ONE].ob_state & SELECTED) tracks = 81;
  114.     sides = 1;
  115.     if (dialog[DOUBLE].ob_state & SELECTED) sides = 2;
  116.     sectors = 9; skew = 11;
  117.     if (dialog[TEN].ob_state & SELECTED) {
  118.         sectors = 10;
  119.         skew = 1;
  120.     }
  121.     if (form_alert(1,"[3][Format disc?][Start|Stop]")==2)
  122.         return;
  123.     graf_mouse(BEE,0);
  124.     for (t=0; t<tracks; ++t) {
  125.         graf_mouse(HIDE,0);
  126.         vr_recfl(handle,box);
  127.         graf_mouse(SHOW,0);
  128.         box[2] += wchar/2;
  129.         for (s=0; s<sides; ++s){
  130.             if (Flopfmt(buffer,0L,drive,sectors,t,s,skew,0x87654321L,0xE5E5)){
  131.                 graf_mouse(POINTER,0);
  132.                 form_alert(1,"[1][A disc error|has occurred][Crumbs!]");
  133.                 return;
  134.             }
  135.         }
  136.     }
  137.     for (i=0; i<5120; buffer[i++]=0);    /* zero buffer */
  138.     Flopwr(buffer,0L,drive,1,2-sides,sides-1,sectors);    /* zero directory */
  139.     Protobt(buffer,0x1000000L,sides+1,0); /* make boot sector */
  140.     buffer[19] = tracks*sectors*sides%256;
  141.     buffer[20] = tracks*sectors*sides/256;
  142.     buffer[24] = sectors;
  143.     Flopwr(buffer,0L,drive,1,0,0,sectors); /* write track 0 */
  144.     graf_mouse(POINTER,0);
  145. }
  146.  
  147.